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
и, следовательно, выставляет мутирующие функции. Однако использование интерфейсов, а не классов реализации более предпочтительно.