我无法理解为什么Java HashMap
与Map
Kotlin中的Java 不兼容:
val map : java.util.Map= java.util.HashMap () // ERROR: Type mismatch
这是一个错误还是故意强制在Kotlin中出错?
这是Java to Kotlin编译器的第二个例子.看看这个Java示例文件:
public class Test { public static void main(String[] args) { java.util.Mapmap = new java.util.HashMap<>(); insertValue(map); } private static void insertValue(java.util.Map map) { map.putIfAbsent(0, 1); } }
运行"将Java转换为Kotlin"会生成以下文件:
object Test { @JvmStatic fun main(args: Array) { val map = java.util.HashMap () insertValue(map) } private fun insertValue(map: Map ) { map.putIfAbsent(0, 1) // ERROR! Unresolved reference } }
如果我尝试修改它以反映更多的原始文件,在insertValue
预期的Java java.util.Map
,我得到另一个错误:
object Test { @JvmStatic fun main(args: Array) { val map = java.util.HashMap () insertValue(map) // ERROR: Type mismatch } private fun insertValue(map: java.util.Map ) { map.putIfAbsent(0, 1) // is now OK } }
mfulton26.. 14
在Kotlin中,a java.util.HashMap
在编译时没有实现java.util.Map
,而是实现kotlin.collections.MutableMap
了扩展只读的实现kotlin.collections.Map
.
这是因为Kotlin的映射类型.见集合在科特林M3是出去!更多细节.
MutableMap
没有定义任何putIfAbsent
,但它有一个扩展功能getOrPut
.
在Kotlin中,a java.util.HashMap
在编译时没有实现java.util.Map
,而是实现kotlin.collections.MutableMap
了扩展只读的实现kotlin.collections.Map
.
这是因为Kotlin的映射类型.见集合在科特林M3是出去!更多细节.
MutableMap
没有定义任何putIfAbsent
,但它有一个扩展功能getOrPut
.