在Kotlin中趁矾,類型系統(tǒng)將可空類型和不可空類型進行了區(qū)分瓮具,
例如: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異常测秸。
本文已經同步到我的個人博客:傳送門