NullPointerException,俗称NPE,不管菜鸟还是老鸟们,都是不可避免,经常遇到的一个异常,解释起来很简单,就“空指针”三个字。总是在一次不小心,而掉进这个陷阱里。Kotlin 的设计目标就是希望消除代码中 null 引用带来的危险, 也就是所谓的造成十亿美元损失的大错误.
NPE的原因
尽管Kotlin希望消除代码中的NPE,我们总是不小心,总会不小心又掉进NPE的陷阱,下面是可能NPE的原因:
- 明确调用 throw NullPointerException()
- 使用 !! 操作符
- 外部的 Java 代码导致这个异常
- 初始化过程中存在某些数据不一致 (在构造器中使用了未初始化的 this)
避免NPE
在Kotlin中,明确区分可以指向 null 的引用 (可为 null 引用) 与不可以指向null的引用 (非null引用). 比如, 一个通常的 String 类型变量不可以指向 null:
var a: String = "abc"
a = null // 编译错误
此时,你对a变量的任何调用都是安全的,因为它为非null,你可以对该引用做任何操作而不会报NPE。就算对a赋值给Null,编译器都会报错,不会让你通过。
可是,实际开发时,不可能所有的变量不会null,总会有情况,变量是null的,此时该如何设定该变量呢?要允许null值的变量, 我们可以将变量声明为可为null的字符串, 写作 String? :
var b: Stri