クラスメソッド
- 省略可能: public や protected などの修飾子。
- 必須: String や Integer など、メソッドが返す値のデータ型。メソッドが値を返さない場合は、void を使用します。
- 必須: カンマで区切られたメソッドの入力パラメーターのリスト。括弧 () で囲まれます。各パラメーターの前にデータ型を指定します。パラメーターがない場合は、1 組の空の括弧を使用します。メソッドに指定できるパラメーターは 32 個までです。
- 必須: 中括弧 {} で囲まれたメソッドの本文。ローカル変数宣言を含めたメソッドのすべてのコードがここに含まれます。
1[public | private | protected | global] [override] [static] data_type method_name
2(input parameters)
3{
4// The body of the method
5}1public static Integer getInt() {
2 return MY_INT;
3 }Java の場合と同様に、結果が別の変数に割り当てられない場合、値を返すメソッドもステートメントとして実行できます。
- システムメソッドが使用されている任意の場所で使用できます。
- 再帰可能です。
- sObject ID を初期化する DML insert ステートメントなど、悪影響がある可能性があります。「Apex DML ステートメント」を参照してください。
- ユーザー定義メソッド自体または同じクラスまたは匿名ブロックで後で定義されたメソッドを参照できます。Apex は、2 つのフェーズでメソッドを解析します。そのため、事前の宣言は必要ありません。
- オーバーロードになる可能性があります。たとえば、example というメソッドは、1 つの integer パラメーターを使用する場合と、2 つの integer パラメーターを使用する場合の、2 とおりの方法で実装できます。Apex のパーサーは、メソッドが 1 つの integers でコールされるか 2 つの interger でコールされるかによって適切な実装を選択して実行します。パーサーで完全一致を検出できない場合、データ型の強制規則を使用して、おおよその一致を検索します。データ変換の詳細は、「変換の規則」を参照してください。
- 戻り値の型が void のメソッドは、Apex コードのスタンドアロンステートメントとして呼び出されます。次に例を示します。
1System.debug('Here is a note for the log.'); - 結果が別の変数に割り当てられない場合、戻り値をステートメントとして実行するステートメントを指定できます。このルールは Java と同じです。
値によってメソッド引数を渡す
Apex では、Integer または String などのすべてのプリミティブデータ型引数は、値によってメソッドに渡されます。つまり、引数への変更はメソッドの範囲内でのみ存在することになります。メソッドが返ったときに、その引数への変更は失われます。
sObject などの非プリミティブデータ型引数は、参照によってメソッドに渡されます。そのため、メソッドが返ったときに、渡された引数はメソッドをコールする前と同じオブジェクトをそのまま参照することになります。メソッド内の参照を別のオブジェクトを指し示すように変更することはできませんが、オブジェクトの項目の値は変更できます。
メソッドにプリミティブデータ型と非プリミティブデータ型を渡す例を次に示します。
例: プリミティブデータ型引数を渡す
1public class PassPrimitiveTypeExample {
2 public static void debugStatusMessage() {
3 String msg = 'Original value';
4 processString(msg);
5 // The value of the msg variable didn't
6 // change; it is still the old value.
7 System.assertEquals(msg, 'Original value');
8 }
9
10 public static void processString(String s) {
11 s = 'Modified value';
12 }
13}例: 非プリミティブデータ型引数を渡す
この例では、List 引数を参照によって reference() メソッドに渡し、変更する方法を示します。その後、referenceNew() メソッド内で、List 引数は別の List オブジェクトを参照するようには変更できないことを示します。
1public class PassNonPrimitiveTypeExample {
2
3 public static void createTemperatureHistory() {
4 List<Integer> fillMe = new List<Integer>();
5 reference(fillMe);
6 // The list is modified and contains five items
7 // as expected.
8 System.assertEquals(fillMe.size(),5);
9
10 List<Integer> createMe = new List<Integer>();
11 referenceNew(createMe);
12 // The list is not modified because it still points
13 // to the original list, not the new list
14 // that the method created.
15 System.assertEquals(createMe.size(),0);
16 }
17
18 public static void reference(List<Integer> m) {
19 // Add rounded temperatures for the last five days.
20 m.add(70);
21 m.add(68);
22 m.add(75);
23 m.add(80);
24 m.add(82);
25 }
26
27 public static void referenceNew(List<Integer> m) {
28 // Assign argument to a new List of
29 // five temperature values.
30 m = new List<Integer>{55, 59, 62, 60, 63};
31 }
32}バージョン管理動作の変更
API バージョン 50.0 以降の場合、範囲およびアクセシビリティのルールは、@namespaceAccessible アノテーションが付加されている Apex 変数、メソッド、内部クラス、およびインターフェースに適用されます。アクセシビリティの考慮事項については、「NamespaceAccessible アノテーション」を参照してください。名前空間ベースの参照についての詳細は、「第二世代パッケージでの Apex クラスの名前空間ベースの参照」を参照してください。