为什么Kotlin MutableMap需要进行空检查?

时间:2018-12-05 16:32:00

标签: kotlin

此代码无法编译:

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

1 个答案:

答案 0 :(得分:1)

这是因为如果地图中没有对应于该键的条目,则map[it]可能返回null。即使您在之前的行中通过调用containsKey进行了检查,也不能保证在调用map[it]时会返回一个值,因为另一个线程可能会更新这两个之间的地图内容电话。