什么?在作业的左侧使用时,在Kotlin中意味着什么?

Son*_*lip 24 kotlin

根据Kotlin文档,?运算符表示"安全调用",这意味着如果它在方法调用链中使用,则整个链将返回null,如果它使用的任何值的值为null.

但是,如果在作业的左侧使用它呢?由于左侧不是"返回"任何东西,它似乎可能有不同的效果.这是我正在谈论的一个例子:

val myObj = SomeObj()
myObj?.property = SomeClass.someFunc() // What does ?. do in this context?
Run Code Online (Sandbox Code Playgroud)

hot*_*key 28

这意味着如果左侧的其中一个安全调用失败(即其接收方为空),则跳过整个赋值,并且根本不评估右侧的表达式.

val nullable: Container? = null
nullable?.x = f() // f is not called
Run Code Online (Sandbox Code Playgroud)

(可运行的演示)

  • @Sonofblip,有一个不同的原因:在多线程环境(JVM是)中,可以在左侧的检查和`myObj?.property的评估之间重新分配全局变量`myObj`. `在右边.所以,你需要再次检查. (4认同)