【问题标题】:Kotlin default implementations from Java来自 Java 的 Kotlin 默认实现
【发布时间】:2020-12-08 12:09:10
【问题描述】:

我在 Kotlin 中有一个接口,我希望它具有默认实现,以便实现类只需实现方法的子集。示例:

interface PersonInterface {
    val firstname: String?
        get() = null
    val lastName: String?
        get() =  null

    val phoneNumbers: List<String>?
        get() = null

    val interests: List<List<String>>?
        get() = emptyList()

}

据我了解,这将为方法创建默认实现以返回 null 或一个空列表或我通常拥有的任何默认值。
但是,如果我在 Java 中创建以下类(我希望它会编译):

public class Employee implements PersonInterface {
}

我明白了:

Class Employee 必须声明为抽象或实现抽象 PersonInterface 中的方法 getFirstName

是否可以在 Java 中使用 Kotlin 中定义的默认接口实现?

【问题讨论】:

    标签: java kotlin interface


    【解决方案1】:

    根据文档 (https://kotlinlang.org/docs/reference/java-to-kotlin-interop.html):

    从 JDK 1.8 开始,Java 中的接口可以包含默认方法。要使 Kotlin 接口的所有非抽象成员默认用于实现它们的 Java 类,请使用 -Xjvm-default=all 编译器选项编译 Kotlin 代码

    注意:在 Kotlin 1.4 之前,要生成默认方法,您可以在这些方法上使用 @JvmDefault 注解。在 1.4 中使用 -Xjvm-default=all 进行编译通常就像使用 @JvmDefault 注释所有接口的非抽象方法并使用 -Xjvm-default=enable 编译一样。但是,在某些情况下,他们的行为会有所不同。 Kotlin 博客上的这篇文章提供了有关 Kotlin 1.4 中默认方法生成更改的详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-23
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 2017-10-26
      • 2021-04-30
      • 1970-01-01
      相关资源
      最近更新 更多