kotlin - 在 Kotlin 中使用接口(interface)的默认函数实现

我有一个带有默认实现的 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/

相关文章:

java - 在 IntelliJ IDEA : "No MessageCollector" 中编译

android - 运算符 == 不能应用于 Kotlin 中的 'Long' 和 'Int'

Kotlin - 等待函数

android - 如何在 RecyclerView.ViewHolder 中使用 kotlin 绑

kotlin - 将列表分成几部分

android - 具有初始值的 MutableLiveData

android - 将项目添加到 LiveData 列表时通知观察者

arrays - Kotlin - 检查数组是否包含值的惯用方法

java - 为什么使用双冒号 (::) 在 Kotlin 中上课?

java - Kotlin 中字段的 `open` 关键字是什么?