此代码无法编译:
val map = mutableMapOf<Int, Int>()
ar.forEach{
if(!map.containsKey(it)) {
map[it] = 1
} else {
map[it] = map[it] + 1
}
}
这是编译错误:
操作员调用对应于点限定调用'map [it] .plus(1)' 可为空的接收器“ map [it]”上不允许这样做。
由于我创建的mutableMap
不具有可为空的参数,我想知道为什么以后需要添加不为空的检查吗?此代码通过:
else map[it] = map[it]!! + 1
答案 0 :(得分:1)
这是因为如果地图中没有对应于该键的条目,则map[it]
可能返回null。即使您在之前的行中通过调用containsKey
进行了检查,也不能保证在调用map[it]
时会返回一个值,因为另一个线程可能会更新这两个之间的地图内容电话。