val map = mapOf(
'a' to 1,
'b' to 2,
'c' to 3
)
val c = 'a'
if (c in map) {
println(map[c] + 1)
}
Run Code Online (Sandbox Code Playgroud)
在简单的代码存根中,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 maptrue 和map[c]not null 之间没有任何关系。请注意,c in map是 的糖map.contains(c),map[c]是 的糖map.get(c)。get和contains是两个独立的方法,根本不相关。
在极端情况下,谁能说在检查通过map后不能修改(例如由另一个线程) ,并且密钥现在已经消失了?inc
如果您想使用地图的值,则只需访问它而不检查c in map。执行 null 检查的方式与任何其他返回可为 null 值的方法相同。例如,您可以val首先将其分配给本地:
val value = map[c]
if (value != null) {
println(value + 1)
}
Run Code Online (Sandbox Code Playgroud)
或者使用?.let:
map[c]?.let { println(it + 1) }
Run Code Online (Sandbox Code Playgroud)
还有很多其他方法可以做到这一点,具体取决于您对值所做的具体操作,但这两种是我能想到的最通用的方法。
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |