Kotlin 无法确定我已经检查了该项目是否在集合中


val map = mapOf(
'a' to 1,
'b' to 2,
'c' to 3
)
val c = 'a'
if (c in map) {
println(map[c] + 1)
}

在简单的代码存根中,Kotlin编译器不允许我执行println中的操作。它向我发出以下警告:

Operator call corresponds to a dot-qualified call 'map[c].plus(1)' which is not allowed on a nullable receiver 'map[c]'.

它让我发疯,我不想用!!来平息它。

对于Kotlin来说,c in map为真与map[c]不为空之间没有关系。注意c in map只是map.contains(c)的糖,map[c]只是map.get(c)的糖。getcontains是两个独立的方法,根本不相关。

在极端的情况下,谁说map不能被修改(例如由另一个线程),在in检查通过后,c键现在已经消失了?

如果你想使用一个map的值,那么只需访问它,而不检查c in map。执行空检查的方式与其他返回可空值的方法相同。例如,您可以先将其分配给本地val:

val value = map[c]
if (value != null) {
println(value + 1)
}

或者使用?.let:

map[c]?.let { println(it + 1) }

还有很多其他的方法可以做到这一点,这取决于你对值做了什么,但这两种是我能想到的最通用的方法。

相关内容

最新更新