Kotlin空值(Nullable Value)的处理以及转换

时间:2022-06-01 20:50:36

 使用Java稍不留神很容易导致NullPointException。Kotlin的类型系统使用可空类型(Nullable Type)旨在消除null引用导致的代码出错。

Kotlin要求我们必须检测可空类型的值,只有非null的值才允许访问。有几种方式来处理可空类型的值,以避免null引用的出现。 

条件检查

var nullableStr?: String = "abc";

val len1= nullableStr.length;  //错误,不允许直接访问可空类型

val len2 = if (nullableStr != null) nullableStr.length else -1  //检查nullableStr为非null。

安全调用符?.

val length = nullableStr?.length

如果nullableStr为null,那么返回null,否则返回length的值。

注意:返回类型也是可空值。这个例子返回的是Int?

在链式调用中的应用:

bob?.department?.head?.name

Elvis 操作符 ?:设置默认值

elvis操作符?:可以让我们对可空类型设置默认值。

val length = nullableStr?.length ?: -1

如果nullableStr为null则返回默认值-1,否则返回length的值。

!!操作符

!!操作符让我们确保了可空类型的引用为非空值,如果为null则抛出NullPointException。

val l = b!!.length

这个让我们清楚知道此处可能会抛出NullPointException,不像Java隐藏了NullPointException的可能。

转换为非空类型

只要确保可空类型的值为非空,即可直接赋值给非空类型。

如使用!!操作符

val nullableInt: Int? = 1
val nonNullableInt: Int = nullableInt!!

使用条件判断

val nullableInt: Int? = 1
if (nullableInt != null) {
   val nonNullableInt: Int = nullableInt
}