空安全:安全调用和 Elvis 操作符

空安全:安全调用和 Elvis 操作符

上一节里我们讲到,对于非空类型变量,我们可以直接调用它的属性和方法而无须担心 NPE,那对于可空类型的变量,我们该怎样 安全地 调用它的属性和方法呢?Kotlin 的解决办法是使用 ?. 安全调用符:

1. 安全调用符 ?.

我们首先看一段 Java 代码:

public void printLengthOfString(String s) {
  if (s != null) 
    System.out.println(s.length());
    System.out.println("null");
}

我们检查传入的字符串是否是 null,如果是 null 则打印 "null",如果不是则打印字符串的长度。

这种写法在 Java 中再常见不过了,对于每个传入的引用类型参数,我们都需要考虑它会不会是 null,即使是简单地调用参数,也要用 if - else 语句进行 null 检查。

这个函数,我们用 Kotlin 可以这样写:

// 安全调用属性