[英]Kotlin cannot make out that I've already checked whether the item is in the collection
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
中的 c 為真和map[c]
不為空之間沒有關系。 請注意, c in map
只是map.contains(c)
的糖,而map[c]
只是map.get(c)
的糖。 get
和contains
是兩個獨立的方法,根本不相關。
在極端情況下,誰說in
檢查通過后map
不能被修改(例如由另一個線程),現在c
鍵已經消失了?
如果您想使用地圖的值,那么只需在不檢查c in map
。 執行空值檢查的方式與對任何其他返回可空值的方法相同。 例如,您可以先將其分配給本地val
:
val value = map[c]
if (value != null) {
println(value + 1)
}
或使用?.let
:
map[c]?.let { println(it + 1) }
還有很多其他方法可以做到這一點,具體取決於您對值所做的確切操作,但這兩種是我能想到的最通用的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.