You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现Java接口的Kotlin类为何触发默认方法异常而非调用重写方法?

问题

定义如下Java接口:

public interface Currency {
   default String getName() {
       throw new NotImplementedException("Implement it!");
   }
}

希望在Kotlin中实现该接口:

object Dollar : Currency {
     val name = "$"

     override fun getName() {
          return name
     }
} 

当通过Dollar()初始化Dollar类并调用.getName()时,会抛出NotImplementedException异常。请问这是什么原因?难道无法将Java接口与Kotlin实现结合使用吗?

解答

问题出在你初始化Dollar的方式上——Dollar()是错误的调用方式。

在Kotlin中,object关键字定义的是单例对象,它不需要通过构造方法初始化,直接使用Dollar(对象名)来访问即可。当你用Dollar()调用时,并没有触发你重写的getName()方法,反而因为错误的调用逻辑,间接执行了Java接口的默认方法,导致抛出异常。

你的Kotlin实现本身是正确的,Java接口与Kotlin实现完全可以结合使用,只要遵循Kotlin的语法规范即可。正确的使用示例如下:

// 直接访问单例对象
val dollarInstance = Dollar
println(dollarInstance.getName()) // 输出 "$"

内容的提问来源于stack exchange,提问作者Baterka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:35:24