我们都知道Kotlin如何应对出现在java中的“Billion Dollar Mistake”,就是改善处理空指针(NPE)的方式。令人惊讶的是,大多数开发者认为Kotlin已经去掉啦NPE或者它已经自行处理掉啦。实际上,Kotlin想表达的是“Kotlin中是没有nulls的,除非你显式声明”,没有变量是默认为空的。
我们只是在Kotlin中区别啦一下空对象和非空对象,也得像以前在java中明确地去处理它们。
Kotlin默认强制给每一个对象初始化一个值而且不可为空。
var showButton: Button = null // 编译时错误
当使用一个可空类型时,必须使用安全操作符?.或者非空断言操作符!!来访问这个可空变量。
此种情形下,如果x为空,这个表达式也将返回空,所以y的类型时Double?.可能存在一种情形,当你知道你的对象不能为空,此时你可以使用!!来断言该对象不为空,从而无需再做空检查。(建议不要使用断言操作符,这和你以前使用java时的做法没差啊)
断言操作符!!将任何值都转化为一个非空类型,如果该值为空,将会抛出一个NPE.
requireNotNull() vs !!
区别在于x!!当x为空时抛出一个NPE,requireNotNull(x)抛出IllegalArguementException
翻译自:The different ways to handle Nullable type in Kotlin](https://medium.com/mindorks/the-different-ways-to-handle-nullable-types-in-kotlin-cc086fa206fa)