提问人:Nytrez 提问时间:7/28/2022 最后编辑:Nytrez 更新时间:7/28/2022 访问量:186
Kotlin 如何处理 null 类对象?
How does Kotlin handle null class objects?
问:
我很好奇 Kotlin 如何处理空值,更具体地说,我的意思是:
class aClass(val input : Int ){
val field = input
}
fun main() {
val obj : aClass? = null
if(obj?.field == null) {
println("true returned")
}
}
在这部分代码中,aClass 类型的对象 obj?作为 null 启动,尽管 field 字段未初始化,但检查字段是否等于 null 的 if 语句返回 true。我知道在 Java 中它会抛出一个错误,即字段未初始化,我们需要首先检查对象是否为 null,然后检查字段是否为 null。
我在任何地方都找不到答案。 所以我的问题是 Kotlin 是如何做到的?默认情况下,它是否将 null 对象的每个字段都视为 null,或者它是否启动了所有字段都等于 null 的对象,也许它只是检查对象是否为 null,甚至不检查字段字段并返回 true,或者其他什么?
答:
?.
是安全呼叫接线员。当您使用它来调用可为 null 的变量的函数或属性,并且该变量当前为 null 时,它会直接返回 null,而不调用该函数或属性。如果该属性或函数通常返回不可为 null 的类型,则安全调用的结果将是该类型的可为 null 的版本。
obj?.field
是 的简写。(if (obj == null) null else obj.field)
官方文档在此处进行了描述。
也许它只是检查对象是否为 null,甚至不检查字段
field
完全。这就是安全导航操作员所做的。 计算结果为 Immediately,如果为 null,则根本不计算。因此,在您的例子中,计算结果为 because 为 null。?.
a?.b
null
a
b
obj?.field
null
obj
另一方面,如果您使用了 而不是 ,则如果为 null,它将抛出异常 ()。!!.
?.
NullPointerException
obj
我在任何地方都找不到答案。
有关的信息在这里。关于的东西在同一页面上,?.
!!
评论