是否有关于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 to Kotlin”转换器创建的。正如user2235698指出的那样,Map<Int, Int>
是一个不可变的Kotlin映射。但是,当我将其更改为java.util.Map
地图时,该示例无法编译。然而,我声称它必须使用默认方法做一些事情会产生误导。
由于这超出了这个问题的范围,我在此处提出了一个后续问题:Does java.util.HashMap not implement java.util.Map in Kotlin?
答案 0 :(得分:9)
已知Java 8互操作性问题被视为this issue
的子任务答案 1 :(得分:3)
Map
不可变且HashMap
可变,这就是为什么你无法放置密钥的原因 - 第一种情况下的价值对。