课程章节介绍
同学们,今天咱们来看一个Apex里挺重要的概念,就是类型解析的顺序。你写代码的时候,可能会碰到像 `T1.T2` 这样用点号连起来的写法,Apex到底怎么去理解它?是把它当成一个内部类,还是一个命名空间下的类,又或者是sObject的关系字段?这时候就需要一套规则来决定了。
Apex解析器在判断一个类型的时候,会按照一个固定的优先级去查找,这个顺序一共分四步:
第一步,先看它是不是一个,纯量类型,。什么是纯量类型呢?就是那些最基本的数据类型,比如 `Integer`、`String`、`Boolean` 这些,系统直接就能认出来。
那如果不是纯量类型,就走第二步:看看是不是,本地定义的类型,。本地定义的类型指的是什么?比如你在当前这个类里面,又定义了一个内部类,或者在同个文件里、同一个作用域下声明的类型。Apex会优先从这个范围里查找。
如果本地也没有,那就进入第三步:,进行类名称查找,。这是说在整个组织或者命名空间里,去搜索有没有叫这个名字的顶级类,或者是其他类里面可以访问到的内部类。这一步相当于一个更广泛的类路径查找。
最后,如果前面三步都没找到,Apex会走到第四步:检查,系统类型,,其中最典型的就是 ,sObject,。比如像 `Contact`、`Account` 这些标准或自定义的对象,就会被当作系统类型来处理。
那这个顺序在实际中是怎么体现的呢?咱们就拿 `T1.T2` 这种形式来举例。当Apex看到 `T1.T2`,它不是随意猜测,而是严格按照刚才的顺序来决定 `T1` 的身份。
如果当前类的内部,有一个内部类叫 `T1`,那按照“本地定义的类型”优先的原则,`T1.T2` 指的就是这个内部类 `T1` 里的 `T2` 类型。如果没有本地内部类,但是有一个顶级类叫 `T1`,那 `T1.T2` 就被解析成那个顶级类里的内部类 `T2`。如果连顶级类也没有,可能 `
关键词
Apex
Salesforce
Developer Guide