在Kotlin中使用接口的默认函数实现
我有一个默认实现的Kotlin接口,例如:
interface Foo { fun bar(): String { return "baz" } }
这将是好的,直到我试图从Java实现这个接口。 当我这样做时,它说这个类需要被标记为抽象或实现方法bar()
。 另外,当我尝试实现该方法时,我无法调用super.bar()
。
请参阅相关问题 。
评论中有一个建议:
用Java编写接口(使用默认方法),Java和Kotlin类都正确使用这些默认值
与早期版本的Java8不同,Kotlin可以在接口中实现默认实现。
将Foo
接口实现为Java类时。 Kotlin隐藏了那些接口方法的实现。 如上所述。
数组在Java平台上与原始数据类型一起使用,以避免装箱/取消装箱操作的成本。 由于Kotlin隐藏了这些实现细节,所以需要一个解决方法来与Java代码进行交互
这是上面链接中的Arrays特有的,但也适用于所有的类(可能是为了支持早期版本的Java8)。
编辑
以上说明是基于意见的。
有一件事我碰到,这是主要原因。
Kotlin二进制文件是用java字节码版本1.8编译的,没有接口中的默认方法。 而且他们正面临解决这个问题的关键问题