我有一个带有默认实现的 Kotlin 接口(interface),例如:
interface Foo {
fun bar(): String {
return "baz"
}
}
在我尝试从 Java 实现这个接口(interface)之前,这没问题。当我这样做时,它说需要将类标记为抽象或实现方法 bar()
。此外,当我尝试实现该方法时,我无法调用 super.bar()
.
最佳答案
生成可从 Java 调用的真正 default
方法是 Kotlin 的实验性功能 1.2.40 .
您需要使用 @JvmDefault
注释对方法进行注释:
interface Foo {
@JvmDefault
fun bar(): String {
return "baz"
}
}
此功能默认仍处于禁用状态,您需要将 -Xjvm-default=enable
标志传递给编译器以使其工作。 (如果您需要在 Gradle 中执行此操作,请参阅 here)。
不过,这确实是实验性的。博文警告说,设计和实现都可能在未来发生变化,至少在我的 IDE 中,尽管编译和工作正常,Java 类仍然标记为未实现这些方法的错误。
https://stackoverflow.com/questions/44179996/