この記事の目次
Salesforceの機能拡張時に使われるinstanceofとは?

Salesforceにおけるinstanceofの概要
Boolean result = obj instanceof Account;
上のコードのように、Salesforceにおけるinstanceofは「+」や「-」などの演算子と同じかたちで使われます。下記で使用例や注意点などについて紹介します。
instanceofキーワードの使用例
// 拡張元のクラス
public class Parent{
}
// 拡張するクラス
public class Child extends Parent{
}
Parent p = new Child();
If (p instanceof Child) {
Child c = (Child) p;
} else {
// Childがpの型に代替できない場合はキャストしない
}
上記のコードでは、拡張元の型の変数pに拡張したクラスのオブジェクトを代入します。そして、型Childをpの型に代替できるかをinstanceofで調べます。このコードでは代替可能なので、pのオブジェクトはChildにキャストされcに代入されます。
instanceofでキャスト可能かを調べるため、より安全なコードになります。
instanceofキーワードの注意点
SalesforceにおいてAPIバージョン32.0以降で保存されたApexでは、instanceofの左のオペランドがnullの場合、instanceofはfalseを返します。下のコードでは、falseを返します。
Object obj = null;
Boolean result = n instanceof Account;
if (result) {
System.debug('true');
} else {
System.debug('false');
}
APIバージョン31.0以前では、この場合instanceofはtrueを返します。
instanceofの優先順位
Apexでは、演算子は規則に従った順序で解釈されます。優先順位は次のとおりです。1が一番優先順位が高く、9が低くなっています。 1.{} () ++ == 2.! -x +x (type) new 3.* / 4.+ – 5.< <= > >= instanceof 6. == != 7.&& 8.|| 9.= += -= *= /= &= もし優先順位がわからなくなった場合は、優先してほしい演算子に「()」のグループ化などを使うことで優先できます。instanceofを使いこなそう!
