kotlin - 更新地图时,将地图从 Java 传递到 Kotlin 不会编译
问题描述
我有一个 Java 函数,它有一个Map<String, String
并且需要将其传递给 Kotlin 函数以向地图添加值。
问题是,如果我有:
fun updateMap(map: Map<String, String>)
似乎map
是不可变的,我不能这样做:map[KEY] = VALUE
因为我得到编译错误。
如果我这样做了,它会起作用:但在那种情况下,如果没有一些我想尽可能避免的转换,我就不能从 Java 代码fun updateMap(map: HashMap<String, String>)
中传递原始代码。
解决方案是什么?map
解决方案
与 Java 不同,Kotlin 具有用于可变和只读集合的单独接口,请参阅Kotlin 集合概述。
Kotlin 中的Map
接口不公开任何修改函数(包括 operator map[key] = value
),但MutableMap
确实如此。
在 JVM 上,KotlinMap
和MutableMap
接口都由 表示java.util.Map
,因此您可以自由地将参数类型更改为MutableMap<String, String>
:
fun updateMap(map: MutableMap<String, String>) {
map["foo"] = "bar"
}
请注意,您可能需要在 Kotlin 代码的其他一些地方更改Map
为MutableMap
,因为编译器不允许您将只读Map
作为MutableMap
参数传递。
至于HashMap
,鉴于它是一个具体的实现,它也实现了MutableMap
,因此暴露了变异函数。但是,使用接口而不是实现类更可取。
推荐阅读
- javascript - 多个选择选项上的jQuery更改事件
- reactjs - 为 React-Native 代码隐藏 Visual Studio 代码终端中的所有警告
- angular - Angular:如何在 2 个不同的选项卡中同时调用一个函数
- angular - 使用 angular pwa 在应用程序加载时仅显示一次启动画面
- ios - SKProductsRequest 不返回针对自动更新订阅的国家/地区特定价格
- android - 使用单独的 backstack 创建类似底部导航的 Instagram
- reactjs - Rollup EMFILE:打开的文件太多,带有 material-ui 图标
- java - 如何卸载 Nitgen eNBSP SDK 库 dll
- azure - 美国号码的呼叫转移
- json - 将多个以换行符分隔的 JSON 文件的文件夹连接到单个文件中