Switch Example — sObjects

DEX455 - Apex 控制流语句:条件判断、Switch 分支与循环完全指南

📄 第 118 页 🎬 视频课程

课程章节介绍

同学们,今天咱们要讲的这个知识点,有点像是给代码做了一次“整形手术”。以前我们在 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