在Kotlin中,類型系統將可空類型和不可空類型進行了區分,
例如:String
為不可空類型,String?
為可空類型
直接調用空的成員變量或者函數將會編譯不通過
var a: String? = "abc"
val l = a.length //compilation error
對于可空引用,如果希望調用它的成員變量或者成員函數,直接調用會出現編譯錯誤,有三種方法可以調用:
- 在調用前,需要先檢查,因為可能為null
- 使用
b?.length
的形式調用,如果b為null,返回null,否則返回b.length - 使用
b!!.length()
的形式調用,如果b為null,拋出空指針異常,否則返回b.length
另外,我們知道類型轉換可能產生ClassCastException異常,例如:
var a: Long = 1
val aInt: Int? = a as Int //java.lang.ClassCastException
那么如何避免這個異常呢?改成下面形式就可以了。
var a: Long = 1
val aInt: Int? = a as? Int
上面這種方法就是安全類型轉換,如果類型轉換不成功,就會返回null,而不是拋出ClassCastException異常。
本文已經同步到我的個人博客:傳送門