Kotlin中的 null安全/空安全

在Kotlin中,类型系统将可空类型和不可空类型进行了区分,
例如:String为不可空类型,String?为可空类型
直接调用空的成员变量或者函数将会编译不通过

var a: String? = "abc"
val l = a.length  //compilation error

对于可空引用,如果希望调用它的成员变量或者成员函数,直接调用会出现编译错误,有三种方法可以调用:

  1. 在调用前,需要先检查,因为可能为null
  2. 使用b?.length的形式调用,如果b为null,返回null,否则返回b.length
  3. 使用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异常。


本文已经同步到我的个人博客:传送门

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容