Kotlin 學(xué)習(xí)筆記 1 :空安全 20200327

兩句話:

1、語法上,要求不能null的,如果編譯時能發(fā)現(xiàn)違反了不能null的約定。則編譯不通過。

總有變量,編譯時,是不能夠知道是不是為空。這個時候還是要進行空判斷。

2、對于這個空判斷。kotlin的語法糖提供了簡易的判斷方法;(來實現(xiàn)所謂的空安全)

a、!!如果是空就nullpointexception(懶惰,沒有默認(rèn)值)

b、?如果是null,返回默認(rèn)值,而不是exception。(就空安全了())??

c、varString?.length()?:-1 類似上面的情況,不過將返回的null修改為一個默認(rèn)值。

友情連接:友情連接

這篇文章說的比較合理:盡可能避免NPE,沒有辦法消除



空安全符號:

非null 申明:String

可null 聲明: String?

可 null 調(diào)用:varName?.length()? null 時返回null

可null 調(diào)用:如果varName?.length()?:-1 與上面一個不同的是,返回一個默認(rèn)值而不是null

保證不null:調(diào)用:varName!!.length()? 如果保證失敗,就NPE

類型安全轉(zhuǎn)換:

避免ClassCastException,

val aInt: Int? = a as? Int? 如果失敗,返回null而不是?ClassCastException



總結(jié)來說:

Kotlin要求:對于一個變量,要么你很自信,保證不為null;要么要把null的不確定性申明出來。二者必取其一。

對于一個變量,你要以保證不空的語法描述;(String , stringVar.length)

????????那么如果還是出現(xiàn)了空:

? ? ? ? ? ?1、 編譯時不通過,盡早發(fā)現(xiàn)是好事;

? ? ? ? ? ? 2、運行時:不好意思,還是會NPE。

如果你不能保證不為Null 那么要把這個不確定性,以語法的形式顯示說明。

kotlin知道后會盡可能的幫你保證null安全。

如果不告訴kotlin這種不確定性,不好意思。Kotlin幫不了你。

轉(zhuǎn)向上面??那種情況。kotlin會以為你很自信,不為null。

? ? ? ?1、 申明:String? 調(diào)用 varString?.? 如果null那么返回null而不是NPE

? ? ? ?2、 以上情況的增強版:如果null,那么返回一個默認(rèn)值,而不是null

? ? ? ?3、最后,一個nullAble的變量,你卻很自信。好:那就varString!!.length()??如果是你自信過頭了。不好意思。還是NPE

技巧:

我們的首要、主要精力應(yīng)該花費在變量聲明時:決定是否絕不null,或者無法確定是否null

如果你申明為,無法確定是否null,那么剩下的交由kotlin,它會盡力幫助你。

只要你不是過分自信,結(jié)果自信過頭(申明了一個會null的變量為String ;一個可null的變量varString!!.length())

NPE就不會那么容易出現(xiàn)了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容