リフレクション メカニズムは、java.lang.reflect パッケージ内のクラスを通じてジェネリック型を処理します。 型の取得: Type インターフェイスを使用して Java 型を表します。ジェネリック パラメーターの取得: パラメーター化された型の場合、TypeVariable インターフェイスを使用してジェネリック パラメーターを取得します。型境界の取得: TypeVariable インターフェイスは、ジェネリック パラメーターの型境界を取得するメソッドを提供します。
はじめに
Java リフレクション メカニズムを使用すると、プログラムは実行時にクラスの構造と動作を検査および変更できます。これは、クラスとオブジェクトのメタデータを反映することによって行われます。ジェネリック型の処理は型の消去を伴うため、リフレクションにとっては困難です。
型の消去
Java では、ジェネリック型はコンパイル時に消去されます。これは、ジェネリック型情報が実行時に保持されないことを意味します。例:
List<String> myList = new ArrayList<>();
実行時には、myList
はジェネリック型情報のないプレーンな ArrayList
になります。
リフレクション メカニズムとジェネリック型
リフレクション メカニズムは、java.lang.reflect
パッケージ内のクラスを使用してジェネリック型を処理します。汎用型情報は、次の手順で取得できます。
Type
インターフェイスを使用して Java 型を表します。 TypeVariable
インターフェイスを使用してそのジェネリック パラメーターを取得できます。 TypeVariable
このインターフェイスは、ジェネリック パラメーターの型境界を取得するメソッドを提供します。 実際的なケース
次の例は、リフレクション メカニズムを使用してジェネリック型情報を取得する方法を示しています。
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { // 创建一个泛型类型对象 List<String> myList = new ArrayList<>(); // 获取类型 Type type = myList.getClass().getGenericSuperclass(); // 检查类型是否为参数化类型 if (type instanceof ParameterizedType) { // 获取泛型参数 Type[] actualTypes = ((ParameterizedType) type).getActualTypeArguments(); // 打印泛型参数的类型 for (Type actualType : actualTypes) { System.out.println(actualType.getTypeName()); } } } }
この例では、 we myList
のジェネリック型を取得し、その型名を出力します。出力は次のとおりです:
java.lang.String
以上がJava リフレクション メカニズムはジェネリック型をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。