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

Phi*_*ßen 9 java compatibility java-8 kotlin

是否有关于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)
}
Run Code Online (Sandbox Code Playgroud)

如果覆盖默认方法,则它可以工作:

import java.util.*

fun main(args: Array<String>) {
    val x : HashMap<Int, Int> = HashMap<Int, Int>()
    x.putIfAbsent(1, 2)
}
Run Code Online (Sandbox Code Playgroud)

这就是我通过实验发现的,但是为了决定是否已经可以从Java 8代码基础迁移到Kotlin,系统的概述将是有价值的.


更新:我的示例中的代码是由"Java to Kotlin"转换器创建的.正如user2235698指出的那样,Map<Int, Int>是一个不可变的Kotlin地图.但是,当我将其更改为java.util.Map地图时,该示例无法编译.然而,我声称它必须使用默认方法做一些事情会产生误导.

由于它超出了这个问题的范围,我在这里开了一个后续问题:java.util.HashMap在Kotlin中没有实现java.util.Map吗?

Phi*_*ßen 9

已知Java 8互操作性问题作为此问题的子任务进行跟踪