假設我們有這樣的代碼來寫,「如果不爲空,否則......」在運行時空解除引用,這不會編譯 - 非常正確。當然,mutableProperty
在'if'中可能不再爲空。科特林和習慣的方法根據各地可變值
我的問題是處理這個問題的最好方法是什麼?
有幾個選項是顯而易見的。在不使用任何新的Kotlin語言功能的情況下,最簡單的方法顯然是將該值複製到方法範圍內,而後者不會隨之改變。
有這樣的:
fun function(argument: SomeOtherClass) {
argument.mutableProperty?.let {
doSomething(it)
return
}
doOtherThing()
}
這具有明顯的缺點,你需要提前歸還或以其他方式避免執行後續的代碼 - 確定在特定的小環境中,但有一個氣味它。
然後有這種可能性:
fun function(argument: SomeOtherClass) {
argument.mutableProperty.let {
when {
it != null -> {
doSomething(it)
}
else -> {
doOtherThing()
}
}
}
}
,但同時它的目的更加清晰,可以說這是不是處理這個問題的Java風格的方式更笨拙和冗長。
我錯過了什麼,有沒有一個首選的習慣用法來達到這個目的?
國際海事組織我真的會認爲,簡單地'with(argument.mutableProperty){i f(this!= null)a(this)else b()}'足夠簡潔(或者與'let'等價)。通常這不應該成爲一個大問題,並且這個問題仍然很短。 – Moira
看起來不錯,謝謝!我建議你把它作爲答案加入 - 至少,這是實現它的另一種方式。 –