問題
次のクラスとトリガーのコードがあります。
public class InsuranceRates{
public static final Decimal smokerCharge = 0.01;
}
trigger ContactTrigger on Contact(before insert){
InsuranceRates rates = new InsuranceRates();
Decimal baseCost = XXX;
}
baseCost変数にクラス変数smokerChargeの値を設定するために、開発者はXXXにどのコードを挿入する必要がありますか。
- rates.smokerCharge
- InsuranceRates.smokerCharge
- ContactTrigger.InsuranceRates.smokerCharge
- rates.getSmokerCharge()
正解
- rates.smokerCharge
- InsuranceRates.smokerCharge
- ContactTrigger.InsuranceRates.smokerCharge
- rates.getSmokerCharge()
解説
この問題のポイントは、静的変数へのアクセス方法を理解しているかどうかという点になります。
静的変数(または静的メンバ)はクラスレベルで定義され、そのクラスのすべてのインスタンスで共有されます。これらの変数にはクラス名を通じてアクセスします。具体的には、「クラス名.静的変数名」の形式で参照します。これはインスタンス変数とは異なります。インスタンス変数は特定のオブジェクトのインスタンスに属していて、それぞれのインスタンスが独自の値を持ちます。
たとえば、以下のようにInsuranceRatesクラスに静的変数smokerChargeが定義されている場合、
public class InsuranceRates {
public static final Decimal smokerCharge = 0.01;
}
このsmokerCharge変数にアクセスするには「InsuranceRates.smokerCharge」と記述します。この方法で、smokerChargeはどのInsuranceRatesオブジェクトからでも同じ値を参照することができます。
それぞれの選択肢の理由について説明します。
□ rates.smokerCharge
これは不正解です。smokerChargeはstatic変数であるため、クラスのインスタンスを使用してアクセスすることはできません。
□ InsuranceRates.smokerCharge
これは正解です。smokerChargeはstatic変数であるため、クラス名を使用して直接アクセスできます。
□ ContactTrigger.InsuranceRates.smokerCharge
これは不正解です。このようなネストされたクラスの参照は正しくありません。また、ContactTriggerトリガー内でInsuranceRatesクラスをネストしているわけではありません。
□ rates.getSmokerCharge()
これは不正解です。示されたコードにはgetSmokerCharge()というメソッドは存在しないため、この方法でsmokerChargeにアクセスすることはできません。
コメント