簡體   English   中英

Kotlin 無法確定我已經檢查過該項目是否在集合中

[英]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)的糖。 getcontains是兩個獨立的方法,根本不相關。

在極端情況下,誰說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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM