3

我有以下课程:

public class B {
}

public class A<B> {
}

鉴于我有两个字符串变量,如何A使用实例化类:Class.forName

String classNameA = "A";
String classNameB = "B";
4

3 回答 3

6

由于类型擦除,在运行时不会有任何泛型类。

例如,以下代码将class java.util.ArrayList在没有泛型的情况下输出:

List<String> list = new ArrayList<String>();
System.out.println(list.getClass());
于 2013-05-21T02:32:52.663 回答
3
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>>.

于 2013-05-21T02:35:33.857 回答
0

由于泛型类的所有实例共享同一个类对象,类型参数对运行时无关紧要,因此您可以简单地执行以下操作:

Class.forName("A").newInstance();

并将结果转换为您需要的任何类型。

于 2013-05-21T05:03:20.440 回答