Kotlin处理空类型的不同方法

我们都知道Kotlin如何应对出现在java中的“Billion Dollar Mistake”,就是改善处理空指针(NPE)的方式。令人惊讶的是,大多数开发者认为Kotlin已经去掉啦NPE或者它已经自行处理掉啦。实际上,Kotlin想表达的是“Kotlin中是没有nulls的,除非你显式声明”,没有变量是默认为空的。
我们只是在Kotlin中区别啦一下空对象和非空对象,也得像以前在java中明确地去处理它们。
Kotlin默认强制给每一个对象初始化一个值而且不可为空。

var showButton: Button = null // 编译时错误
Kotlin处理空类型的不同方法_第1张图片

当使用一个可空类型时,必须使用安全操作符?.或者非空断言操作符!!来访问这个可空变量。


Kotlin处理空类型的不同方法_第2张图片

此种情形下,如果x为空,这个表达式也将返回空,所以y的类型时Double?.可能存在一种情形,当你知道你的对象不能为空,此时你可以使用!!来断言该对象不为空,从而无需再做空检查。(建议不要使用断言操作符,这和你以前使用java时的做法没差啊)


Kotlin处理空类型的不同方法_第3张图片

断言操作符!!将任何值都转化为一个非空类型,如果该值为空,将会抛出一个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)

你可能感兴趣的:(Kotlin处理空类型的不同方法)