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

时间:2015-12-11 17:03:59

标签: java java-8 compatibility 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)
}

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

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?

2 个答案:

答案 0 :(得分:9)

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

的子任务

答案 1 :(得分:3)

Kotlin中

Map 不可变HashMap 可变,这就是为什么你无法放置密钥的原因 - 第一种情况下的价值对。

More details

相关问题