java.util.HashMap是否在Kotlin中实现了java.util.Map?
我很难理解为什么Javajava.util.HashMap是否在Kotlin中实现了java.util.Map?,java,inheritance,language-lawyer,kotlin,Java,Inheritance,Language Lawyer,Kotlin,我很难理解为什么JavaHashMap与Kotlin中的JavaMap不兼容: val map : java.util.Map<Int, Int> = java.util.HashMap<Int, Int>() // ERROR: Type mismatch 我认为,这是一个错误。你可以在那里报告 但是,putIfAbsent仍然是Java8的一个特性,Kotlin还不支持(MutableMap接
HashMap
与Kotlin中的JavaMap
不兼容:
val map : java.util.Map<Int, Int> = java.util.HashMap<Int, Int>()
// ERROR: Type mismatch
我认为,这是一个错误。你可以在那里报告
但是,
putIfAbsent
仍然是Java8的一个特性,Kotlin还不支持(MutableMap
接口缺少此方法)。在Kotlin中,Java.util.HashMap
在编译时没有实现Java.util.Map
,但是实现了kotlin.collections.MutableMap
,它扩展了只读kotlin.collections.Map
这是因为科特林的。有关详细信息,请参见中的集合
没有定义任何
putIfAbsent
,但它有一个扩展功能。我创建了一个错误报告,主要针对“Java到Kotlin”转换器,该转换器在我的原始示例中生成无效的Kotlin代码:
我还提到,java.util.HashMap
没有实现java.util.Map
,但是我把它留给Kotlin开发人员来决定它是一个bug还是编译器拒绝它是正确的
更新:错误被标记为已解决(提交)。您确定吗?我认为运行时不存在
kotlin.MutableMap
?正确。这就是为什么我在回答中写了“编译时”。Kotlin在编译时可用,但在运行时映射到不同的类型。更多关于平台类型和功能的详细信息。我怀疑投票被否决是因为缺少支持这个答案的参考资料。e、 g.如果提供了指向某个问题或相关文档的链接,说明/表明Java集合在Kotlin中未得到特别处理,则某些人可能会认为此答案更有帮助。我个人非常感谢此答案,但我希望它引用了一个具体问题或一些支持它可能是错误的文档。无需为了否决投票,如果这是一个错误,唯一支持的事实就是这种行为的不合逻辑性
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);
}
}
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
}
}
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
}
}