Я понимание проблемы, почему Java HashMap
несовместима с Java Map
в Котлин:Содержит ли java.util.HashMap java.util.Map в Котлине?
val map : java.util.Map<Int, Int> = java.util.HashMap<Int, Int>()
// ERROR: Type mismatch
Является ли это ошибка или он намеренно применяются, чтобы быть ошибка в Котлин?
Вот второй пример с Java на Котлин компилятором. Посмотрите на этом примере файл 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);
}
}
Запуск «Преобразование Java в Котлин» результатов в этом файле:
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
}
}
Вы уверены? Я думал, что «котлин.MutableMap' не существует во время выполнения? – voddan
Исправить. Вот почему я написал «во время компиляции» в своем ответе. Kotlin [сопоставленные типы] (https://kotlinlang.org/docs/reference/java-interop.html#mapped-types) доступны во время компиляции, а затем отображаются во время выполнения для разных типов. Подробнее о типах плат [здесь] (https://kotlinlang.org/docs/reference/java-interop.html#null-safety-and-platform-types) и [здесь] (https://kotlinlang.org/ документы/ссылки/Java-interop.html # нотация-для-платформ-типов). – mfulton26