是否有最新的Java 8特性概述,这些特性在Kotlin中还不受支持?
例如,调用默认方法(如Map#putIfAbsent )无法编译(不支持引用错误):
import java.util.*
fun main(args: Array<String>) {
val x : Map<Int, Int> = HashMap<Int, Int>()
x.putIfAbsent(1, 2)
}如果重写了默认方法,则它可以工作:
import java.util.*
fun main(args: Array<String>) {
val x : HashMap<Int, Int> = HashMap<Int, Int>()
x.putIfAbsent(1, 2)
}这就是我通过实验发现的,但是对于决定是否可以从Java 8代码迁移到Kotlin,一个系统的概述是很有价值的。
更新:示例中的代码是由"Java“转换器创建的。正如user2235698所指出的,Map<Int, Int>是一个不可变的Kotlin映射。尽管如此,当我将示例更改为java.util.Map映射时,它仍然无法编译。然而,我声称它必须用默认方法做一些事情,这是误导性的。
由于它超出了这个问题的范围,我打开了一个后续问题,在这里:java.util.HashMap没有在Kotlin中实现java.util.Map吗?。
发布于 2015-12-11 18:05:18
已知的Java 8互操作性问题被跟踪为本期的子任务
发布于 2015-12-13 16:29:02
Map是不变的,而HashMap是Kotlin中的可变,这就是为什么不能将键值对放在第一种情况下。
https://stackoverflow.com/questions/34228786
复制相似问题