Newer Version Available
コンストラクタの使用
コンストラクタとは、クラスの設計図からオブジェクトを作成するときに呼び出されるコードです。すべてのクラスにコンストラクタを記述する必要はありません。クラスにユーザ定義のコンストラクタが存在しない場合、引数をとらない暗黙的な公開コンストラクタが使用されます。
コンストラクタの構文はメソッドと似ていますが、コンストラクタには明示的な戻り値の型がないことと、作成元のオブジェクトから継承されないという点がメソッドとは異なります。
クラスのコンストラクタを記述した後に、コンストラクタを使用してそのクラスのオブジェクトをインスタンス化するには、new キーワードを使用する必要があります。たとえば、次のクラスを使用するとします。
1swfobject.registerObject("clippy.codeblock-0", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class TestObject {
18
19 // The no argument constructor
20 public TestObject() {
21 // more code here
22 }
23}
24この型の新しいオブジェクトは、次のコードを使用してインスタンス化できます。
1TestObject myTest = new TestObject();引数を取るコンストラクタを記述する場合、記述したコンストラクタを使用して、その引数を使用するオブジェクトを作成できます。引数を取るコンストラクタを作成するが、引数を取らないコンストラクタを引き続き使用する場合は、引数を取らないコンストラクタをコードに含める必要があります。いったんクラスのコンストラクタを作成すると、デフォルトの引数を取らない公開コンストラクタにアクセスすることはできません。新たに作成する必要があります。
Apex では、コンストラクタはオーバーロード、つまり、異なるパラメータを持つ複数のコンストラクタを持つことができます。次の例では、引数のないコンストラクタと、単純な整数の引数を取るコンストラクタの 2 つのコンストラクタを持つクラスを示します。また、コントラクタが this(...) 構文を使用して別のコンストラクタをコールする方法 (コントラクタチェーニングとも呼ばれる) を示します。
1swfobject.registerObject("clippy.codeblock-2", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class TestObject2 {
18
19private static final Integer DEFAULT_SIZE = 10;
20
21Integer size;
22
23 //Constructor with no arguments
24 public TestObject2() {
25 this(DEFAULT_SIZE); // Using this(...) calls the one argument constructor
26 }
27
28 // Constructor with one argument
29 public TestObject2(Integer ObjectSize) {
30 size = ObjectSize;
31 }
32}
33この型の新しいオブジェクトは、次のコードを使用してインスタンス化できます。
1TestObject2 myObject1 = new TestObject2(42);
2 TestObject2 myObject2 = new TestObject2();クラスに作成した各コンストラクタには、それぞれ個別の引数リストが必要です。適切なコンストラクタの例を次に示します。
1swfobject.registerObject("clippy.codeblock-4", "9");
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public class Leads {
18
19 // First a no-argument constructor
20 public Leads () {}
21
22 // A constructor with one argument
23 public Leads (Boolean call) {}
24
25 // A constructor with two arguments
26 public Leads (String email, Boolean call) {}
27
28 // Though this constructor has the same arguments as the
29 // one above, they are in a different order, so this is legal
30 public Leads (Boolean call, String email) {}
31}
32新しいクラスを定義する場合、新しいデータ型を定義することになります。クラス名は、string、boolean、account など、他のデータ型の名前を使用できる場所であれば、どの場所でも使用できます。型がクラスである変数を定義する場合、それに割り当てるオブジェクトはそのクラスまたはサブクラスのインスタンスでなければなりません。