如何创建代表通用对象的Class
?如何获得泛型类的类?
List<String> list = new List<String>();
Class c1 = list.class;
Class c2 = Class.forName(???); // <- how?
assert c1 == c2;
如何创建代表通用对象的Class
?如何获得泛型类的类?
List<String> list = new List<String>();
Class c1 = list.class;
Class c2 = Class.forName(???); // <- how?
assert c1 == c2;
一个类的对象是不特定于满足其类型参数的特殊类:
assert (new ArrayList<String>()).getClass() == (new ArrayList<Integer>()).getClass();
它是完全相同的对象,无论它是如何打出来。
由于type erasure由于通用信息在运行时不存在,所以不能。
您的代码可以这样写:
List<String> list = new ArrayList<String>();
Class c1 = list.getClass();
Class c2 = Class.forName("java.util.ArrayList");
System.out.println(c1 == c2); // true
Class
并不代表一般类型。使用的适当类型是java.lang.reflect.Type
,特别是ParameterizedType
。你可以通过反射来获得这些物体或制作你自己的物体。
(注意,仿制药是一个静态打字功能,这样是不是真的适合运行时对象。静态类型的信息恰好被保存在类文件并通过反射物体的反射API暴露。)
是什么你真的想在这里完成? – 2011-02-17 14:30:15