在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异常。
本文已经同步到我的个人博客:传送门