我需要调用一个超级构造函数,它要求我传递泛型类型的.class
引用。我怎样才能用Java实现这个目标?
构造函数想拥有..
Class<List<MyType>>
由于泛型在运行时被擦除,我不知道如何满足构造函数。
List<MyType>.class // does not work ;-)
答案 0 :(得分:7)
像这样(首先转换为Class
原始类型):
@SuppressWarnings({ "unchecked", "rawtypes" })
Class<List<MyType>> clazz = (Class) List.class
答案 1 :(得分:1)
您无法调用List<MyType>
的构造函数,实际上您无法将List
的构造函数作为其接口调用。你可以做的是调用ArrayList.class
的构造函数,并传递你期望的元素类型。
public C createCollection(Class<? extends Collection> collectionClass, Class elementClass, int number) {
Collecton c = (Collection) collectionClass.newInstance();
for(int i=0;i<number;i++)
c.add(elementClass.newInstance());
return (C) c;
}
List<MyType> list = createCollection(ArrayList.class, MyType.class, 100);