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 中是 immutable 而 HashMap
是 mutable,这就是为什么你不能把第一种情况下的键值对。
是否有关于 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 中是 immutable 而 HashMap
是 mutable,这就是为什么你不能把第一种情况下的键值对。