使用Map接口将元素放入HashMap中

2022-09-02 21:12:34

我正在尝试 Kotlin,但我遇到了一个我无法解决的小问题。当我有以下构造时,我可以将元素放入映射中:

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

但是,当我使用界面创建地图时,我只能读取它们,我做错了什么?Map

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

或者也许我对Kotlin中的接口感到困惑?


答案 1

在第一个示例映射中获取 HashMap 的类型,在第二个示例中,将其转换为接口映射。

Map 是只读映射,没有 put/set,请参阅此处

为了能够编辑地图,您应该使用可变地图


答案 2

在使用 kotlin 集合时,一个重要的考虑因素是,kotlin 将其集合分类为可变和不可变。这与Java相反,Java不存在这样的分类。

在大多数集合的 kotlin 中,您有一个仅支持只读方法的基本接口。在你的例子中,Map<K,V就是一个例子,来自文档

此接口中的方法仅支持对映射的只读访问;通过 MutableMap 接口支持读写访问。

这是当你尝试修改映射后出错的原因,即使实际的对象是类型,但引用是类型,这将只提供只读操作。val map: Map<String, String> = HashMap<String, String>();HashMap<String,String>mapMap<String,String>

现在,如果您使用实现MutableMap<K,V>的类,那么您也可以将值放在map中。这是这种情况,因为这里的类型是 HashMap<K,V>,它扩展,因此是可变的。val map = HashMap<String, String>()mapMutableMap<K,V>