空指针检查
- 空指针是一种不受编程语言检查的运行时异常,只能由程序员主动通过逻辑判断来避免,但即使是最出色的程序员,也不可能将所有潜在的空指针异常全部考虑到。比如说:下面这段代码,在调用参数的方法之前先进行一个判空处理:
public void doStudy(Study study) {
if (study != null) {
study.readBooks();
study.doHomework();
}
}
可空类型系统
- Kotlin中的doStudy,看上去和Java版本并没有什么区别,但它是没有空指针风险的,因为Kotlin默认所有参数和变量都不可为空,所以如果传入的Study参数若为空,会引起编译错误。
- Kotlin提供了另外一套可为空的类型系统,就是在类名的后面加上一个问号。比如:Int表示不可为空的整型,而Int?就表示可为空的整型;String表示不可为空的字符串,而String?就表示可为空的字符串。
(1)?. 操作符表示当对象不为空时正常调用相应的方法,当对象为空时则什么都不做。比如:
a?.doSomething()
if (a != null) {
a.doSomething()
}
(2)?: 操作符表示如果左边表达式的结果不为空就返回左边表达式的结果,否则就返回右边表达式的结果。比如:
val c = a ?: b
val c = if (a ! = null) {
a
} else {
b
}
- 判空辅助工具:结合使用**?.操作符和let函数**可以对多次重复调用的某个变量统一进行判空处理。比如:
fun doStudy(study: Study?) {
study?.readBooks()
study?.doHomework()
}
fun doStudy(study: Study?) {
study?.let {
it.readBooks()
it.doHomework()
}
}
|