前言:
空指针异常是Android系统上崩溃率非常非常高的异常类型,主要是因为空指针是一种不受编程语言检查的运行时异常,只能由程序员主动通过逻辑判断避免,但即使是最出色的程序员,也不可能将所有潜在的空指针异常全部考虑到。然而,kotlin却非常科学地解决了这个问题。它利用编译时判空检查机制几乎杜绝了空指针异常。
1. 可空类型系统
下面我们先来看一段代码:
fun doStudy(study:Study){
study.readBookd()
study.doHomework()
}
上述代码会有空指针风险吗?答案是没有。因为kotlin默认所有的参数和变量都不可为空,如果你尝试向doStudy()方法传入一个null参数,则会直接编译报错,因为Kotlin将空指针异常检查提前到了编译期。
那如果我们的业务逻辑就是需要某个变量或者参数为空怎么办呢?kotlin为我们提供了另一套可空的系统类型,只不过在使用这种类型时,我们需要在编译期就将所有潜在的空指针异常都处理掉,否则无法通过编译。
何为可为空的系统类型?就是在类名后面加上一个问号。比如String表示不可为空的字符串,而String?就表示可为空的字符串。现在回到刚才的例子:
fun main(){
doStudy(null)
}
fun doStudy(study:Study?){
study.