この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Type クラス

Apex クラスに対応する Apex のデータ型を取得し、新しい型をインスタンス化するためのメソッドを含みます。

名前空間

System

使用方法

forName メソッドを使用して、Apex クラス (組み込みクラスまたはユーザー定義クラス) のデータ型を取得します。これらのメソッドを使用して、公開およびグローバルクラスのデータ型を取得できます。ただし、非公開クラスのデータ型はコンテキストユーザーがアクセスできる場合でも、取得できません。また、newInstance メソッドは、インターフェースを実装する型をインスタンス化し、そのメソッドをコールすると同時に、パッケージの登録者など他のユーザーがメソッドの実装を提供できるようにする場合に使用します。

Type.forName() をコールすると、クラスがコンパイルされる場��があります。

メモ

例: 名前に基づいた Type のインスタンス化

次のサンプルは、Type メソッドを使用して、Type をその名前に基づいてインスタンス化する方法を示します。このシナリオの典型的な応用として、パッケージの登録者が、インストールされたパッケージの一部としてインターフェースのカスタム実装を提供する場合があります。パッケージは、登録者の組織のカスタム設定を介してインターフェースを実装するクラスの名前を取得できます。パッケージは、このクラス名に対応する型をインスタンス化して、登録者が実装したメソッドを呼び出すことができます。

このサンプルでは、VehicleVehicleImpl クラスによって実装されるインターフェースを表します。最後のクラスには、VehicleImpl に実装されたメソッドを呼び出すコードサンプルが含まれます。

これが Vehicle インターフェースです。
これが Vehicle インターフェースの実装です。
このクラスのメソッドは、Vehicle インターフェースを実装するクラスの名前をカスタム設定値を介して取得します。その後、このクラスをインスタンス化するために、対応する型を取得し、newInstance メソッドをコールします。次に、VehicleImpl に実装されたメソッドを呼び出します。このサンプルでは、className という名前のテキスト項目を持つ CustomImplementation という名前の公開リストカスタム設定を作成する必要があります。このカスタム設定のレコードを、Vehicle というデータセット名とクラス名値 VehicleImpl で 1 つ作成します。

クラスのプロパティ

class プロパティは、コールされたデータ型の System.Type を返します。これは、プリミティブデータ型とコレクション、sObject 型、ユーザー定義クラスを含むすべての Apex 組み込みデータ型で公開されます。forName メソッドの代わりにこのプロパティを使用できます。

データ型名に対してこのプロパティをコールします。次に例を示します。

JSON.deserializedeserializeStrictJSONParser.readValueAsreadValueAsStrict メソッドの 2 番目の引数にこのプロパティを使用して、デシリアライズするオブジェクトのデータ型を取得できます。次に例を示します。

Type のメソッド

Type のメソッドは次のとおりです。

equals(typeToCompare)

指定されたデータ型が現在のデータ型と同じ場合は true を返し、そうでない場合は false を返します。

署名

public Boolean equals(Object typeToCompare)

パラメーター

typeToCompare
型: Object
現在のデータ型と比較するデータ型です。

戻り値

型: Boolean

forName(fullyQualifiedName)

指定された完全修飾クラス名に対応するデータ型を返します。

署名

public static System.Type forName(String fullyQualifiedName)

パラメーター

fullyQualifiedName
型: String
データ型を取得するクラスの完全修飾名です。完全修飾クラス名には、MyNamespace.ClassName などの名前空間名が含まれます。

戻り値

型: System.Type

使用方法

  • このメソッドでは、管理パッケージの非グローバルクラスの型を取得するために、管理パッケージ外からコールされた場合は null を返します。これは、非グローバルクラスは管理パッケージ外では参照できないためです。Salesforce API バージョン 27.0 以前を使用して保存された Apex の場合、このメソッドは非グローバルの管理パッケージクラスの対応するクラス種別を返します。
  • 名前空間が定義されていない組織のローカル型の名前を取得するためにインストールされた管理パッケージから forName(fullyQualifiedName) メソッドをコールすると、null が返されます。forName(namespace, name) メソッドを代わりに使用し、namespace 引数に空の文字列または null を指定します。
  • Type.forName() をコールすると、クラスがコンパイルされる場合があります。

メモ

forName(namespace, name)

指定された名前空間およびクラス名に対応するデータ型を返します。

署名

public static System.Type forName(String namespace, String name)

パラメーター

namespace
型: String
クラスの名前空間。クラスに名前空間がない場合、namespace 引数を null または空の文字列に設定します。
name
型: String
クラスの名前です。

戻り値

型: System.Type

使用方法

  • このメソッドでは、管理パッケージの非グローバルクラスの型を取得するために、管理パッケージ外からコールされた場合は null を返します。これは、非グローバルクラスは管理パッケージ外では参照できないためです。Salesforce API バージョン 27.0 以前を使用して保存された Apex の場合、このメソッドは非グローバルの管理パッケージクラスの対応するクラス種別を返します。
  • 名前空間が定義されていない組織にインストールされた管理パッケージからコールする場合には、forName(fullyQualifiedName) の代わりにこのメソッドを使用します。ローカル型の名前を取得するには、namespace 引数を空の文字列または null に設定します。たとえば、Type t = Type.forName('', 'ClassName'); です。
  • Type.forName() をコールすると、クラスがコンパイルされる場合があります。

メモ

この例では、ClassName クラスおよび MyNamespace 名前空間に対応するデータ型を取得する方法を示します。

バージョン管理動作の変更

API バージョン 60.0 以降の場合、このメソッドのコール時に無効な名前空間を使用すると null が返されます。以前は、Apex では Type.forName('InvalidNamespace', 'OuterClass.InnerClass') のように無効な名前空間を指定したり、Type.forName('OuterClass', 'InnerClass') のように名前空間として外部クラスを使用したりすることができましたが、結果は不確定でした。

getName()

現在の型の名前を返します。

署名

public String getName()

戻り値

型: String

この例では、Type の名前を取得する方法を示します。最初に forName をコールして Type を取得し、次にその Type オブジェクトに対して getName をコールします。

hashCode()

現在のデータ型のハッシュコード値を返します。

署名

public Integer hashCode()

戻り値

型: Integer

使用方法

返されたハッシュコード値は、String.hashCode が返す型名のハッシュコードに対応します。

isAssignableFrom(sourceType)

指定された種別のオブジェクト参照を子種別から割り当てことができる場合は true を返します。できない場合は、false を返します。

署名

public Boolean isAssignableFrom(Type sourceType)

パラメーター

sourceType
互換性チェックで使用するオブジェクトの種別。

戻り値

型: Boolean

メソッドが parentType.isAssignableFrom(childType) として呼び出された場合は、true が返されます。次のいずれかの方法で呼び出された場合、メソッドは false を返します。
  • childType.isAssignableFrom(parentType)
  • typeA.isAssignableFrom(TypeB)。TypeB は TypeA の同階層
  • typeA.isAssignableFrom(TypeB)。TypeB と TypeA は関連性なし

childType が parentType の子になるのは、childType が、インターフェースを実装しているとき、仮想クラスまたは抽象クラスを拡張しているとき、または parentType と同じ System.Type であるときです。

メモ

使用方法

instanceof 演算子とは異なり、このメソッドでは、クラスのインスタンスを作成しなくても、種別の互換性をチェックできます。このメソッドにより、instanceof で必要な静的コンパイル時依存関係が解消されます。

次のコードは、一般的な ISV 顧客が isAssignableFrom() を使用して、顧客定義の種別 (customerProvidedPluginType) と有効なプラグイン種別の互換性をチェックする方法を示しています。

次のコードスニペットでは、最初に、Callable インターフェースを実装する同階層のクラス A および B と、関連性のないクラス C が定義されています。次に、isAssignableFrom() を使用して、いくつかの種別の比較が探索されています。

newInstance()

現在の型のインスタンスを作成し、この新しいインスタンスを返します。

署名

public Object newInstance()

戻り値

型: Object

使用方法

newInstance は汎用オブジェクト型を返すため、この値を保持する変数の型に戻り値を変換する必要があります。

このメソッドを使用すると、インターフェースを実装する Type をインスタンス化し、そのメソッドをコールできると同時に、他のユーザーがメソッドの実装を提供できるようになります。たとえば、パッケージ開発者がインターフェースを提供し、登録者がそのインターフェースを実装してパッケージをインストールできます。パッケージのコードは、登録者の Type をインスタンス化することで、登録者のインターフェースメソッドの実装をコールします。

次の例では、Type のインスタンスを作成する方法を示します。最初に forName をクラスの名前 (ShapeImpl) でコールして Type を取得し、次にこの Type オブジェクトに対して newInstance をコールします。newObj インスタンスは、ShapeImpl クラスが実装するインターフェース型 (Shape) を使用して宣言されます。newInstance メソッドの戻り値は、Shape 型に変換されます。

toString()

現在のデータ型 (データ型名) を文字列表現で返します。

署名

public String toString()

戻り値

型: String

使用方法

このメソッドは、getName と同じ値を返します。String.valueOf および System.debug はこのメソッドを使用して、Type 引数を string に変換します。

この例では、Integer のリストに対応する Type に対して toString をコールします。