私は次のクラスを持っています:
public class B {
}
public class A<B> {
}
2 つの文字列変数がある場合、A
を使用してクラスをインスタンス化するにはどうすればよいですか。Class.forName
String classNameA = "A";
String classNameB = "B";
私は次のクラスを持っています:
public class B {
}
public class A<B> {
}
2 つの文字列変数がある場合、A
を使用してクラスをインスタンス化するにはどうすればよいですか。Class.forName
String classNameA = "A";
String classNameB = "B";
タイプ eraserのため、実行時にジェネリック クラスはありません。
たとえば、次のコードはclass java.util.ArrayList
ジェネリックなしで出力されます。
List<String> list = new ArrayList<String>();
System.out.println(list.getClass());
Class<B> bClass = (Class<B>) Class.forName(classNameB);
B b = bClass.newInstance();
Class<A<B>> aClass = (Class<A<B>>) Class.forName(classNameA);
A<B> a = aClass.newInstance();
型 A の型パラメーターは実行時に存在しないため、 にキャストできaClass
ますClass<A<B>>
。
ジェネリック クラスのすべてのインスタンスは同じクラス オブジェクトを共有するため、型パラメーターはランタイムには関係ないため、次のように簡単に実行できます。
Class.forName("A").newInstance();
結果を必要な型にキャストします。