Java Generics Pass .class参考

时间:2012-08-21 08:07:36

标签: java generics

我需要调用一个超级构造函数,它要求我传递泛型类型的.class引用。我怎样才能用Java实现这个目标?

构造函数想拥有..

Class<List<MyType>>

由于泛型在运行时被擦除,我不知道如何满足构造函数。

List<MyType>.class // does not work ;-)

2 个答案:

答案 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);