Safe Navigation Operator (?.)

DEX455 - 编写 Apex 代码:数据类型、集合、变量与运算符完全参考

📄 第 100 页 🎬 视频课程

课程章节介绍

今天我们来说一个很实用的小知识点——Apex里的,安全导航操作符,,也就是那个问号加点(`?.`)。 想象一下,你写了一串很长的对象引用,比如:`account.ContactPerson.Name`,但如果中间任何一个环节是空的,比如`ContactPerson`是null,代码就会直接崩掉,抛出一个大家都很熟悉的 ,NullPointerException,。 为了避免这个问题,我们以前的做法是写一堆`if`判断,挨个儿检查中间是不是null。这样代码就会变得又长又难看。 现在好了,Apex给我们提供了一个更优雅的写法,就是使用 `?.` 这个操作符。 它的逻辑很简单:,当你在链式调用方法、访问变量或属性时,只要在点号前加上一个问号,如果左边的那一部分计算出来是null,整个表达式就会直接短路,马上返回null,而不会继续往下执行,这样也就不会抛空指针异常了。, 举个例子: ```apex String street = account?.ContactPerson?.Address?.Street; ``` 如果`account`本身是null,或者`ContactPerson`为空,那么`street`就会被直接赋值为null,整个过程平平安安。 不过要注意,,安全导航操作符不是哪儿都能用的,。有些场景下就不能用它,你得记住: - 不能用在带点的类型或静态表达上,比如`ClassName?.StaticMethod()`这种不可以。 - 静态变量的访问或静态方法调用不可以。 - 不能用在赋值表达式的左边,因为它本身设计出来是读值用的。 - SOQL的绑定表达里不能用。 - 还有个特别的地方——,不能在`SObject`的纯量字段上链式调用`addLock()`,,这一点官方特别提了,要留意一下。 总的来说,只要你理解了它的短路保护机制,并且避开那些不能用的情况,它就能大大简化你检查空值的代码,让你写出来的东西既清晰又安全。 好,今天这一小节就到这里,我们下次继续。

关键词

Apex Salesforce Developer Guide