课程章节介绍
同学们,今天咱们要讲的这个知识点,有点像是给代码做了一次“整形手术”。以前我们在 Apex 里处理不同类型的 sObject 时,比如从某个通用记录变量里,既可能是 Account,也可能是 Contact,还可能是 null,你通常要写一长串 if-else,里面套着 instanceof 检查,然后再手动强制转换类型,代码既啰嗦又容易出错。
现在呢,Apex 给我们提供了一个更优雅的写法——你可以直接对一个 sObject 变量使用 ,switch, 语句。Slide 上把它叫做“打开 sObject 值”,其实意思就是,用 switch 去匹配这个 sObject 的实际类型。注意,这里可能是笔误写成了 sBody,实际我们讨论的都是 sObject。
这个写法,能隐式地帮你完成两件事:一个是 instanceof 类型检查,另一个是自动的强制转换,所以你不用再写又长又臭的 if-else 链了。
怎么用呢?在 when 子句里,你可以直接声明一个带类型的变量,比如 `when Account a`,它就创建了一个 Account 类型的变量 a,并且已经帮你把原来的 sObject 自动转成 Account 了。这样你在这个 when 块里面,可以马上用 a.Name、a.AccountNumber 这些字段,非常舒服。每个 when 块也只能指定一种 sObject 类型,结构清清楚楚。
而且,这个 switch 还能专门处理 null 的情况,写一个 `when null` 就可以了,这样即使是个空记录,你也能妥善处理,不会被遗漏。
举个简单的例子,假设有一个 sObject 变量 `record`,它可能是 Account、Contact,或者是 null。以前你要这样写:
```apex
if (record instanceof Account) {
Account acc = (Account) record;
// 处理 Account
} else if (record instanceof Contact) {
Contact con = (Contact) record;
// 处理 Contact
} else if (record == null) {
// 处理空值
}
```
用新的 switch 写法,就变成了:
```apex
switch on record {
when Account a {
// 直接使用 a,它是 Account 类型
System.debug(a.Name);
}
when Contact c {
// 直接使用 c,它是 Contact 类型
System.debug(c.LastName);
}
when null {
// 处理空值
}
}
```
是不是瞬间清爽了很多?这就好比,你走进一个房间,switch 帮你自动识别来客身份,并且递上对应的名片,你直接握手就好了,不需要再自己验明正身再去要名片。所以这个特性,能大大提高代码的可读性,也减少了类型转换带来的潜在风险。在写触发器或者通用工具类时,特别有用。
好了,这一页的核心就是:通过 switch 来匹配 sObject 类型,让代码告别冗长的 instanceof 和强转,更简洁、更安全。大家可以在练习中试一试,习惯之后,你会爱上这种写法的。
关键词
Apex
Salesforce
Developer Guide