📅  最后修改于: 2023-12-03 14:58:15.583000             🧑  作者: Mango
在Kotlin中,当我们调用一个对象的成员函数时,确保该对象必须是非空的。否则,我们将会遇到 NullPointerException
异常。
当我们调用 first()
函数时,也必须确保集合或数组不是空的。否则,我们也将会遇到 NullPointerException
异常。
当我们在空对象上调用 first()
函数时,会出现如下错误:
kotlin.NullPointerException: null cannot be cast to non-null type kotlin.collections.Iterable<T>
at kotlin.collections.CollectionsKt___CollectionsKt.first(_Collections.kt:482)
...
这个错误消息告诉我们,我们正在尝试将 null
强制转换为非空的集合/数组类型。这是不可能的。
要解决这个问题,我们可以使用 ?.
安全操作符,以允许在空对象上调用函数,如下所示:
val list: List<Int>? = null
val firstItem = list?.firstOrNull() // 返回 null
在这个例子中,我们使用 ?.
安全操作符。它将在调用 firstOrNull()
函数之前检查 list
是否为空。如果 list
是 null,则返回 null
。
如果我们确实需要调用 first()
,并且我们知道该集合/数组不为空,则可以使用以下代码:
val list = listOf(1, 2, 3)
val firstItem = list.first()
在这个例子中,我们使用 list
,它已经被初始化为非空列表。这样就不需要使用 ?.
安全操作符,因为我们知道它不为空。