Мне трудно понять, почему Java HashMap
несовместим с Java Map
в Kotlin:
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
}
}