如何为java.lang.Class
这样的通用集合获取Collection<SomeObject>
的实例?
我正在寻找以下内容:
Class clazz = Collection<SomeObject>.class;
答案 0 :(得分:3)
你做不到。类型擦除意味着你不能这样做。
你能做的是:
答案 1 :(得分:2)
正如其他人所说,这些类型在运行时被删除。您必须为方法提供类对象。假设所有扩展SomeObject
的类都具有没有参数的构造函数,您可以使用反射创建对象。示例:
public <T extends SomeObject> Collection<T> getObjects(Class<T> clazz) {
List<T> result = new ArrayList<T>();
for(int i=0; i<3; i++) {
try {
T t = clazz.getConstructor((Class[]) null).newInstance((Object[]) null);
// do something with t
result.add(t);
} catch (Exception e) {
// handle exception
}
}
return result;
}
如果您有一个扩展SomeObject
的类,您可以使用如下方法:
class ObjA extends SomeObject {
}
Collection<ObjA> collection = getObjects(ObjA.class);
答案 2 :(得分:1)
在运行时,这些类型将被删除。如果您使用Collection的实例并调用getClass(),您将只获得Collection类。
还有其他反射API来获取有关使用type参数声明的成员的信息。