Передача карты из Java в Kotlin не компилируется при обновлении карты - PullRequest
1 голос
/ 07 апреля 2020

У меня есть функция Java, которая имеет Map<String, String и должна передать ее в функцию Kotlin для добавления значений на карту.
Проблема в том, что если у меня есть:

fun updateMap(map: Map<String, String>)

Кажется, что map является неизменным, и я не могу сделать: map[KEY] = VALUE при получении ошибки компиляции.
Это сработало бы, если бы я сделал: fun updateMap(map: HashMap<String, String>), но в этом случае я не могу передать исходный код map из кода Java без каких-либо преобразований, которых я хотел бы избежать, если это возможно.
Какое решение для этого?

1 Ответ

2 голосов
/ 07 апреля 2020

Kotlin, в отличие от Java, имеет отдельные интерфейсы для изменяемых и доступных только для чтения коллекций, см. Kotlin Обзор коллекций .

Интерфейс Map в Kotlin не предоставляет никаких функций изменения (включая оператор map[key] = value), но MutableMap делает.

На JVM интерфейсы Kotlin Map и MutableMap представлены java.util.Map, так что вы можете свободно изменять тип параметра на MutableMap<String, String>:

fun updateMap(map: MutableMap<String, String>) {
    map["foo"] = "bar"
}

Обратите внимание, что вам может потребоваться изменить Map на MutableMap в некоторых других местах в вашем коде Kotlin , так как компилятор не позволит вам передавать доступный только для чтения Map в качестве аргумента MutableMap.

Что касается HashMap, учитывая, что это конкретная реализация, он также реализует MutableMap и, следовательно, выставляет мутирующие функции. Однако использование интерфейсов, а не классов реализации более предпочтительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...