Kotlin 安全呼叫接线员

示例

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

第一个?.给您提供您要访问的属性或函数,如果对象为null,则为null:

val string: String? = "你好,世界!"
print(string.length)   // 编译错误:无法直接访问可为null的属性。
print(string?.length)  // Will print the string's length, or "null" if the string is null.

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

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

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

这将调用foo和bar上obj(这是this在apply块)仅当obj是非空,否则跳过整个块。

要将可为空的变量作为不可为空的引用引入作用域而又不使其成为函数和属性调用的隐式接收者,则可以使用let代替apply:

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

notnull可以命名为任何名称,甚至可以省略,并通过隐式lambda参数使用it。