Type クラス
名前空間
使用方法
forName メソッドを使用して、Apex クラス (組み込みクラスまたはユーザ定義クラス) のデータ型を取得します。また、newInstance メソッドは、インターフェースを実装する型をインスタンス化し、そのメソッドをコールすると同時に、パッケージの登録者など他のユーザがメソッドの実装を提供できるようにする場合に使用します。
例: 名前に基づいた Type のインスタンス化
次のサンプルは、Type メソッドを使用して、Type をその名前に基づいてインスタンス化する方法を示します。このシナリオの典型的な応用として、パッケージの登録者が、インストールされたパッケージの一部としてインターフェースのカスタム実装を提供する場合があります。パッケージは、登録者の組織のカスタム設定を介してインターフェースを実装するクラスの名前を取得できます。パッケージは、このクラス名に対応する型をインスタンス化して、登録者が実装したメソッドを呼び出すことができます。
このサンプルでは、Vehicle が VehicleImpl クラスによって実装されるインターフェースを表します。最後のクラスには、VehicleImpl に実装されたメソッドを呼び出すコードサンプルが含まれます。
1global class VehicleImpl implements Vehicle {
2 global Long getMaxSpeed() { return 100; }
3 global String getType() { return 'Sedan'; }
4}1public class CustomerImplInvocationClass {
2
3 public static void invokeCustomImpl() {
4 // Get the class name from a custom setting.
5 // This class implements the Vehicle interface.
6 CustomImplementation__c cs = CustomImplementation__c.getInstance('Vehicle');
7
8 // Get the Type corresponding to the class name
9 Type t = Type.forName(cs.className__c);
10
11 // Instantiate the type.
12 // The type of the instantiated object
13 // is the interface.
14 Vehicle v = (Vehicle)t.newInstance();
15
16 // Call the methods that have a custom implementation
17 System.debug('Max speed: ' + v.getMaxSpeed());
18 System.debug('Vehicle type: ' + v.getType());
19 }
20}クラスのプロパティ
class プロパティは、コールされたデータ型の System.Type を返します。これは、プリミティブデータ型とコレクション、sObject 型、ユーザ定義クラスを含むすべての Apex 組み込みデータ型で公開されます。forName メソッドの代わりにこのプロパティを使用できます。
1System.Type t = Integer.class;JSON.deserialize、deserializeStrict、JSONParser.readValueAs、readValueAsStrict メソッドの 2 番目の引数にこのプロパティを使用して、並列化するオブジェクトのデータ型を取得できます。たとえば、次のようになります。
1Decimal n = (Decimal)JSON.deserialize('100.1', Decimal.class);型メソッド
Type のメソッドは次のとおりです。
equals(typeToCompare)
署名
public Boolean equals(Object typeToCompare)
パラメータ
- typeToCompare
- 型: Object
- 現在のデータ型と比較するデータ型です。
戻り値
型: Boolean
例
1Type t1 = Account.class;
2Type t2 = Type.forName('Account');
3System.assert(t1.equals(t2));forName(fullyQualifiedName)
署名
public static System.Type forName(String fullyQualifiedName)
パラメータ
- fullyQualifiedName
- 型: String
- データ型を取得するクラスの完全修飾名です。完全修飾クラス名には、MyNamespace.ClassName などの名前空間名が含まれます。
戻り値
型: System.Type
使用方法
forName(namespace, name)
署名
public static System.Type forName(String namespace, String name)
パラメータ
戻り値
型: System.Type
使用方法
例
この例では、ClassName クラスおよび MyNamespace 名前空間に対応するデータ型を取得する方法を示します。
1Type myType =
2 Type.forName('MyNamespace', 'ClassName');getName()
署名
public String getName()
戻り値
型: String
例
この例では、Type の名前を取得する方法を示します。最初に forName をコールして Type を取得し、次にその Type オブジェクトに対して getName をコールします。
1Type t =
2 Type.forName('MyClassName');
3
4String typeName =
5 t.getName();
6System.assertEquals('MyClassName',
7 typeName);hashCode()
署名
public Integer hashCode()
戻り値
型: Integer
使用方法
返されたハッシュコード値は、String.hashCode が返す型名のハッシュコードに対応します。
newInstance()
署名
public Object newInstance()
戻り値
型: Object
使用方法
newInstance は汎用オブジェクト型を返すため、この値を保持する変数の型に戻り値を変換する必要があります。
このメソッドを使用すると、イ��ターフェースを実装する Type をインスタンス化し、そのメソッドをコールできると同時に、他のユーザがメソッドの実装を提供できるようになります。たとえば、パッケージ開発者がインターフェースを提供し、登録者がそのインターフェースを実装してパッケージをインストールできます。パッケージのコードは、登録者の Type をインスタンス化することで、登録者のインターフェースメソッドの実装をコールします。
例
次の例では、Type のインスタンスを作成する方法を示します。最初に forName をクラスの名前 (ShapeImpl) でコールして Type を取得し、次にこの Type オブジェクトに対して newInstance をコールします。newObj インスタンスは、ShapeImpl クラスが実装するインターフェース型 (Shape) を使用して宣言されます。newInstance メソッドの戻り値は、Shape 型に変換されます。
1Type t =
2 Type.forName('ShapeImpl');
3
4Shape newObj =
5 (Shape)t.newInstance();toString()
署名
public String toString()
戻り値
型: String
使用方法
このメソッドは、getName と同じ値を返します。String.valueOf および System.debug はこのメソッドを使用して、Type 引数を string に変換します。
例
この例では、Integer のリストに対応する Type に対して toString をコールします。
1Type t = List<Integer>.class;
2String s = t.toString();
3System.assertEquals('List<Integer>', s);