使用Map接口将元素放入HashMap

Putting element into HashMap with Map interface

我正在尝试使用 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 中的接口感到困惑?

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

地图是只读地图,没有put/set,见here

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

在使用 kotlin 集合时,一个重要的考虑因素是,kotlin 将其集合分为可变和不可变两类。这与 java 形成对比,后者不存在此类分类。

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

Methods in this interface support only read-only access to the map; read-write access is supported through the MutableMap interface.

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

现在,如果您使用实现 MutableMap<K,V> then you can put values in map as well. this is the case with val map = HashMap<String, String>(), since here type of map is HashMap<K,V> 的 class,它扩展了 MutableMap<K,V>,因此是可变的。