2015-07-16 15 views
7

Próbuję Kotlin i napotkałem mały problem, którego nie mogę rozwiązać. Kiedy mam następującą konstrukcję można umieścić elementy na mapie:Wstawianie elementu do HashMap z interfejsem mapy

val map = HashMap<String, String>() 
map["asd"] = "s" 
map.put("34", "354") 

Jednak gdy tworzę mapę z interfejsem Map mogę tylko je czytać, co robię źle?

val map: Map<String, String> = HashMap<String, String>(); 
map.put("24", "34") //error 
map["23"] = "23" //error 

A może wprowadzam w błąd coś o interfejsach w Kotlin?

Odpowiedz

10

W pierwszym przykładzie mapa dostaje typ HashMap, w drugim przykładzie, który rzutujesz na Mapę interfejsu.

mapa jest tylko do odczytu map, nie ma put/set, zobacz here

Aby móc edytować mapę, należy użyć MutableMap

+0

Jadąc od Javy, ważne jest, aby pamiętać, że mapa nie pochodzi z java.util.Map, ale z mapy zdefiniowanej w Collections.kt. Jako nowicjusz Kotlin, również mnie to zaskoczyło. Jak wspomniano powyżej Mapa jest tylko do odczytu; aby zmienić mapę użyj MutableMap. Istnieją również metody pomocnicze do tworzenia różnych map w Maps.kt, np. HashMapOf itd –