Kotlin搞空指針檢查
現(xiàn)象:java存在問題,大量的崩潰是空指針異常。
原因:java的空指針異常是一種運(yùn)行時(shí)異常,不會(huì)在編譯過程中發(fā)現(xiàn),所以難以避免
Kotlin的解決之道:搞了一個(gè)空指針檢查。Kotlin默認(rèn)所有的參數(shù)和變量不可為空。
//study 默認(rèn)不能傳空
fun doStudy(study: Study){
study.readBooks()
study.doHomework()
}
//這么寫會(huì)直接報(bào)異常
doStudy(null)
怎么傳入一個(gè)可為空的值,
fun doStudy(study: Study?){
study.readBooks()
study.doHomework()
}
這樣study.readBooks()就報(bào)錯(cuò)了,因?yàn)閟tudy可能為null
解決的辦法:?.,表示當(dāng)study不為空的時(shí)候執(zhí)行后面的方法。
fun doStudy(study: Study?){
study?.readBooks()
study?.doHomework()
}
那么我每次都要寫?.來表示study不為空的時(shí)候再執(zhí)行嗎?
kotlin提供了一個(gè)let函數(shù)
study?.let {
it.readBooks()
it.doHomework()
}
如果我在函數(shù)的調(diào)用處已經(jīng)判斷過study不為空,我非常確定study不可能為空,那么可以使用!!.斷言來表示
study!!.readBooks()
kotlin中的三目運(yùn)算符的表現(xiàn)形式也變了,當(dāng)?:左邊的不為空的時(shí)候則執(zhí)行左邊的表達(dá)式,當(dāng)左邊的表達(dá)式為空,則用右邊的來替換。
fun test(){
val t:String="sssssss"
fun getTextLength(text:String?)=text?.length?:0
println(getTextLength(t))
}