Phi*_*ßen 14 java inheritance language-lawyer kotlin
我无法理解为什么Java HashMap与MapKotlin中的Java 不兼容:
val map : java.util.Map<Int, Int> = java.util.HashMap<Int, Int>()
// ERROR: Type mismatch
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是故意强制在Kotlin中出错?
这是Java to 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);
}
}
Run Code Online (Sandbox Code Playgroud)
运行"将Java转换为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
}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试修改它以反映更多的原始文件,在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
}
}
Run Code Online (Sandbox Code Playgroud)
mfu*_*n26 14
在Kotlin中,a java.util.HashMap在编译时没有实现java.util.Map,而是实现kotlin.collections.MutableMap了扩展只读的实现kotlin.collections.Map.
这是因为Kotlin的映射类型.见集合在科特林M3是出去!更多细节.
MutableMap没有定义任何putIfAbsent,但它有一个扩展功能getOrPut.
| 归档时间: |
|
| 查看次数: |
2512 次 |
| 最近记录: |