【发布时间】:2016-03-19 05:49:46
【问题描述】:
我很难理解为什么 Java HashMap 与 Kotlin 中的 Java Map 不兼容:
val map : java.util.Map<Int, Int> = java.util.HashMap<Int, Int>()
// ERROR: Type mismatch
这是一个错误,还是故意强制成为 Kotlin 中的一个错误?
这是 Java 到 Kotlin 编译器的第二个示例。看看这个 Java 示例文件:
public class Test {
public static void main(String[] args) {
java.util.Map<Integer, Integer> map = new java.util.HashMap<>();
insertValue(map);
}
private static void insertValue(java.util.Map<Integer, Integer> map) {
map.putIfAbsent(0, 1);
}
}
运行“Convert Java to Kotlin”会生成这个文件:
object Test {
@JvmStatic fun main(args: Array<String>) {
val map = java.util.HashMap<Int, Int>()
insertValue(map)
}
private fun insertValue(map: Map<Int, Int>) {
map.putIfAbsent(0, 1) // ERROR! Unresolved reference
}
}
如果我尝试修改它以反映更多原始文件,其中 insertValue 期望 Java java.util.Map,我会收到另一个错误:
object Test {
@JvmStatic fun main(args: Array<String>) {
val map = java.util.HashMap<Int, Int>()
insertValue(map) // ERROR: Type mismatch
}
private fun insertValue(map: java.util.Map<Int, Int>) {
map.putIfAbsent(0, 1) // is now OK
}
}
【问题讨论】:
标签: java inheritance language-lawyer kotlin