名前空間、クラス、変数名の優先順位
ローカル変数、クラス名、名前空間が同じ識別子を使用することは仮定上可能であるため、Apex パーサーは次のように name1.name2.[...].nameN 形式の式を評価します。
- パーサーは、まず name1 が name2 から nameN を項目参照として持つローカル変数であると仮定します。
- 最初の仮定が true でない場合、パーサーは name1 がクラス名であり、name2 が name3 から nameN を項目参照として持つ静的変数名であると仮定します。
- 2 つ目の仮定が true でない場合、パーサーは name1 が名前空間名、name2 がクラス名、name3 が静的変数名であり、name4 から nameN が項目参照であると仮定します。
- 3 つ目の仮定も true でない場合は、パーサーはエラーを返します。
式が 1 組の括弧で終了する場合 (name1.name2.[...].nameM.nameN() など)、Apex パーサーは式を次のように評価します。
- パーサーは、まず name1 が name2 から nameM を項目参照として持つローカル変数、nameN がメソッド呼び出しであると仮定します。
- 最初の仮定が true でない場合、次の処理を行います。
- 式に識別子が 2 つしか含まれていない場合 (name1.name2())、パーサーは name1 がクラス名で name2 がメソッド呼び出しであると仮定します。
- 式に識別子が 3 つ以上含まれている場合、パーサーは name1 がクラス名、name2 が name3 から nameM を項目参照として持つ静的変数名、nameN がメソッド呼び出しであると仮定します。
- 2 つ目の仮定が true でない場合、パーサーは name1 が名前空間名、name2 がクラス名、name3 が静的変数名であり、name4 から nameM が項目参照、nameN がメソッド呼び出しであると仮定します。
- 3 つ目の仮定も true でない場合は、パーサーはエラーを返します。
ただし、クラス変数については Apex はメンバー変数の参照にドット表記を使う場合もあります。それ��のメンバー変数は他のクラスインスタンスを参照することも、また、項目名への参照 (外部キーのアクセスのためなど) に独自のドット表記ルールを持つ sObject を参照することもあります。
式に sObject 項目を入力すると、式の残りは sObject ドメインにとどまります。つまり、sObject 項目は Apex 式を再度参照することはできません。
たとえば、次のクラスがあるとします。
1public class c {
2 c1 c1 = new c1();
3 class c1 { c2 c2; }
4 class c2 { Account a; }
5}その場合、次の式はすべて有効です。
1c.c1.c2.a.name
2c.c1.c2.a.owner.lastName.toLowerCase()
3c.c1.c2.a.tasks
4c.c1.c2.a.contacts.size()