Kotlin:Java 8的哪些function尚未支持?
是否有关于Java 8function的最新概述,这些function在Kotlin中尚不受支持?
例如,调用像Map#putIfAbsent这样的默认方法无法编译(不支持的引用错误):
import java.util.* fun main(args: Array) { val x : Map = HashMap() x.putIfAbsent(1, 2) }
如果默认方法被覆盖,它将起作用:
import java.util.* fun main(args: Array) { val x : HashMap = HashMap() x.putIfAbsent(1, 2) }
这就是我通过实验发现的结果,但是对于决定是否已经可以从Java 8代码迁移到Kotlin,系统性的概述将是有价值的。
更新:我的例子中的代码是由“Java to Kotlin”转换器创建的。 正如user2235698指出的那样, Map
是一个不可变的Kotlin映射。 不过,当我将其更改为java.util.Map
映射时,该示例无法编译。 然而,我声称它必须用默认的方法做一些事情,这是误导性的。
由于它超出了这个问题的范围,所以我在这里打开了一个后续问题: java.util.HashMap是否不在Kotlin中实现java.util.Map?
已知的Java 8互操作性问题被作为这个问题的子任务来跟踪
Map
是不可变的 , HashMap
在Kotlin中是可变的,这就是为什么在第一种情况下你不能放置键值对。
更多细节