安全呼叫运算符

要访问可空类型的函数和属性,必须使用特殊运算符。

第一个,?.,为你提供你尝试访问的属性或函数,或者如果对象为 null,则为 null;

val string: String? = "Hello World!"
print(string.length)   // Compile error: Can't directly access property of nullable type.
print(string?.length)  // Will print the string's length, or "null" if the string is null.

成语:在同一个 null 检查对象上调用多个方法

调用 null 检查对象的多个方法的一种优雅方法是使用 Kotlin 的 apply 如下所示:

obj?.apply { 
    `foo()`
    `bar()`
}

只有当 obj 为非空时,才会在 objapply 块中的 this)上调用 foobar,否则将跳过整个块。

要将可空变量作为非可空引用放入作用域而不使其成为函数和属性调用的隐式接收器,可以使用 let 而不是 apply

nullable?.let { notnull ->
    `notnull.foo()`
    `notnull.bar()`
}

notnull 可以被命名为任何东西,甚至可以通过隐含的 lambda 参数 it 省略和使用