繁体   English   中英

使用 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 中的接口有些困惑?

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

地图是只读地图,没有放置/设置,见这里

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM