Kotlin:Java 8 的哪些功能还不受支持?

Kotlin: What features of Java 8 are not yet supported?

是否有关于 Java 8 个 Kotlin 尚不支持的功能的最新概述?


比如调用默认方法Map#putIfAbsent编译失败(unsupported reference error):

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 到 Kotlin”转换器创建的。正如 user2235698 指出的那样,Map<Int, Int> 是一个不可变的 Kotlin 映射。尽管如此,当我将它更改为 java.util.Map 映射时,该示例仍无法编译。然而,我声称它必须用默认方法做一些事情是误导性的。

由于超出了这个问题的范围,我在这里开了一个后续问题:

已知 Java 8 个互操作性问题作为 this issue

的子任务进行跟踪

Map 在 Kotlin 中是 immutableHashMapmutable,这就是为什么你不能把第一种情况下的键值对。