为什么kotlin中两个可变映射的和是一个映射
我有两个函数返回可变映射为什么kotlin中两个可变映射的和是一个映射,kotlin,mutablemap,Kotlin,Mutablemap,我有两个函数返回可变映射 fun mumapone() = mutableMapOf<String, Any>("one" to 1) fun mumaptwo() = mutableMapOf<String, Any>("two" to 1) + mumapone() fakeConfig()的类型仍将是Map,更改此类型的唯一方法是强制转换它或 (xx + yy).toMutatleMap() 重复这个问题,为什么
fun mumapone() = mutableMapOf<String, Any>("one" to 1)
fun mumaptwo() = mutableMapOf<String, Any>("two" to 1) + mumapone()
fakeConfig()
的类型仍将是Map,更改此类型的唯一方法是强制转换它或
(xx + yy).toMutatleMap()
重复这个问题,为什么两个可变映射的和会变成一个映射而不是一个可变映射
干杯
es当您对两个映射求和时,默认情况下假定的接口是Map,因为MutableMap是接口的一个实现,所以不能假定它用于
+
操作符
但是,如果您想避免强制转换或转换,您可以简单地创建第三个可变映射,并将其中的其他两个映射相加。该贴图将保留该类型,不需要强制转换
kotlin文档中的更多信息:加号操作仅在映射界面中定义,其结果是一个不可变的映射 MutableMap实现不会覆盖此操作,因此,当您使用MutableMaps调用它时,实际上是在调用一个映射操作,而不是MutableMap操作。 正如你在这里看到的 来自文档: plus 通过替换或添加来自另一个映射的条目来创建新的只读映射
operator fun <K, V> Map<out K, V>.plus(
map: Map<out K, V>
): Map<K, V>
operator fun Map.plus(
地图:地图
):地图
通常+
用于返回新数据结构的不可变操作
您可以为MutableMap实现+
操作符,但这不是一个好主意,因为该函数已经存在:
fun main() {
val foo = mutableMapOf(1 to "one", 2 to "two")
val bar = mapOf(3 to "three", 4 to "four")
foo.putAll(bar)
println(foo)
}
输出:
{1=one, 2=two, 3=three, 4=four}
最好使用+
获取新的不可变映射,或者显式使用可变操作,例如putAll()
你可以这样写mumaptowo
:
fun mumaptwo() = mumapone().putAll(mutableMapOf<String, Any>("two" to 1))
mumapone().putAll(mutableMapOf(“2”到1))
可变映射提供特定于映射的写入操作。通过这些操作,可以使用基于键的值访问来更改地图内容
MutableMap
只不过是一个具有写入操作的映射
有一些规则定义映射上的写入操作:
值可以更新。反过来,关键点永远不会改变:一旦你添加了一个条目,它的关键点是不变的
对于每个键,始终有一个与之关联的值。您可以添加和删除整个条目
添加操作
要向可变映射添加新的键值对,请使用put()
要一次添加多个条目,请使用putAll()
您还可以使用速记运算符表单向地图添加新条目。有两种方法:
plusaSign(+=)
运算符
set()
的[]
运算符别名
fun mumaptwo() = mumapone().putAll(mutableMapOf<String, Any>("two" to 1))