同学们,之前我们学过了Apex里循环的基本写法。今天咱们再深入一点,把循环用在列表、集合,还有SOQL查询上的几个要点捋一捋,这些细节虽然小,但写代码时很容易踩坑。
首先,当我们用for循环去遍历一个列表或集合的时候,比如 `List
` 或者 `Set`,你声明的那个循环变量,它的类型必须跟集合里存放的元素类型完全一致。如果是基本类型,像String、Integer这些,变量类型就得是相同的String或Integer;如果是sObject,比如Account、Contact,变量类型也必须是那个sObject。举个例子呀,你有一个 `List` 叫names,那你这么写 `for (String n : names)` 就是对的,循环变量n的类型就是String。你要是写成 `for (Object n : names)`,虽然Object是所有类的父类,但这种直接遍历列表的写法里Apex不允许,它会报类型不匹配的错。集合里是啥,你循环变量就声明成啥,简单直接。
接着说SOQL for循环,这是我们经常会用到的,直接在一个for循环里写入SOQL查询。写法像这样:
```apex
for (Account acc : [SELECT Id, Name FROM Account]) {
// 处理每条Account记录
}
```
或者你也可以用一个列表变量来接收查询结果:
```apex
for (List accList : [SELECT Id, Name FROM Account]) {
// 这里accList是每次返回的一组记录,可以批量处理
}
```
关键点在于,循环变量(单个sObject或者sObject的列表)的类型,也必须跟你查询返回的sObject类型相同。比如你查询的是Account,那变量就是Account或 `List`;查询的是Contact,就是Contact或 `List`。如果不匹配,编译都过不去。
最后,还有个花括号的小规矩。如果for循环的代码块里只有一句代码,你可以省略花括号,像这样:
```apex
for (Account a : accList)
System.debug(a.Name);
```
但如果里面有多于一条语句,比如既要调试输出又要更新字段,那你就必须用花括号把代码块包起来,不然Apex只把紧跟的第一行当成循环体,后面就不认了。其实为了代码清晰,也建议大家哪怕只有一行也加上花括号,养成好习惯,以后改代码加语句不容易出错。
好了,这几个点记住了,以后写循环就更顺了。咱们接着看后面的内容。