gpt4 book ai didi

kotlin - 更新 map 时,将 map 从 Java 传递到 Kotlin 不会编译

转载 作者:行者123 更新时间:2023-12-02 13:18:42 26 4
gpt4 key购买 nike

我有一个具有 Map<String, String 的 Java 函数并且需要将其传递给 Kotlin 函数以向 map 添加值。
问题是,如果我有:

fun updateMap(map: Map<String, String>)

似乎 map是不可变的,我做不到: map[KEY] = VALUE当我得到编译错误时。
如果我这样做会起作用: fun updateMap(map: HashMap<String, String>)但在那种情况下,我无法通过原始 map从 Java 代码中提取,如果可能的话,我想避免一些强制转换。
解决方案是什么?

最佳答案

Kotlin 与 Java 不同,对可变集合和只读集合有单独的接口(interface),请参阅 Kotlin Collections Overview .
Map Kotlin 中的接口(interface)不公开任何修改函数(包括运算符 map[key] = value ),但 MutableMap做。

在 JVM 上,Kotlin MapMutableMap接口(interface)都由 java.util.Map 表示,因此您可以自由地将参数类型更改为 MutableMap<String, String> :

fun updateMap(map: MutableMap<String, String>) {
map["foo"] = "bar"
}

请注意,您可能需要更改 MapMutableMap在 Kotlin 代码的其他一些地方,因为编译器不允许您传递只读 Map作为 MutableMap争论。

至于 HashMap ,鉴于它是一个具体的实现,它也实现了 MutableMap因此暴露了变异函数。但是,使用接口(interface)而不是实现类更可取。

关于kotlin - 更新 map 时,将 map 从 Java 传递到 Kotlin 不会编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61075937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com