寫于2020年01月08日
一肥隆、Kotlin中?. / !! / ?: 的理解
val list: ArrayList<String>? = null
// ? 對象不為空時執(zhí)行
if (list?.size > 1) {
println("list is empty")
}
1.以上代碼:編譯期就會報錯,當(dāng)我們判斷l(xiāng)ist.size的時候恰聘,編譯器會告訴我們"Operator call corresponds to a dot-qualified call 'list?.size.compareTo(0)' which is not allowed on a nullable receiver 'list?.size'."。大概意思是晴叨,當(dāng)list為null的時,它的size返回就是"null"菌湃,但是"null"不可以和int值比大小遍略,所以編譯器建議我們寫成roomList?.size!! > 0。
val list: ArrayList<String>? = null
// !! 和正常的java一樣绪杏,不為空時執(zhí)行纽绍,為空時拋出異常
if (list?.size!! > 1) {
println("list is empty")
}
- !! 其實就和java對對象的處理是一樣的了,當(dāng)使用的對象不為空時就正常執(zhí)行拌夏,為空時就拋出異常。
val list: ArrayList<String>? = null
// 類似java的三目表達(dá)式
if (list?.size ?:0> 1) {
println("list is empty")
}
- ?: 判斷對象為null的三目表達(dá)式盹愚,list?.size ?: 0 等價于 list.size==null?0:list.size