如何在Kotlin编写的接口中使用默认方法的Java8特性
我在java中有一个类a,在Kotlin中有一个接口B
// kotlin
interface B {
fun optional()
}
// java
class A implements B {
}
我想在Kotlin接口(B)中编写默认方法(Java8特性),并想在类A中实现它。 我怎样才能做到呢
提前谢谢
你可以在下面搜索框中键入要查询的问题!
我在java中有一个类a,在Kotlin中有一个接口B
// kotlin
interface B {
fun optional()
}
// java
class A implements B {
}
我想在Kotlin接口(B)中编写默认方法(Java8特性),并想在类A中实现它。 我怎样才能做到呢
提前谢谢
# 1 楼答案
只要
A
之外还有其他类实现B
,这可能是有意义的。否则,您要么不需要默认实现,要么不必在实现类中实现该方法但是,您可以这样做:
# 2 楼答案
在Kotlin中,带有实体的接口方法默认编译如下:
大致编译为:
然后,在实现这个接口的Kotlin类中,编译器会自动为
optional
方法添加一个覆盖,并在那里调用B.DefaultImpls.optional(this)
但是,如果您想在Java中实现这个接口,避免必须重写} feature
optional
方法并手动调用B.DefaultImpls
,该怎么办?在这种情况下,可以使用the experimental ^{首先,您需要启用几个编译器选项:
-jvm-target 1.8
-Xjvm-default=enable
(请参阅上面链接中的其他可用选项值)然后,用
@JvmDefault
注释optional
方法:它被编译成
现在这个接口的Java实现变成了: