Java 泛型传递 .class 引用

8
我需要调用一个要求我传递一个泛型类型的.class引用的超级构造函数。如何使用Java实现这一点?
构造函数希望有...
Class<List<MyType>>

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

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

哦,我猜现在我在Stackoverflow上找到了答案。希望有比这个(Class<List<Object>>)(Class<?>)List.class更干净的解决方案。 - chris1069603
不幸的是,这就是Java的“Class”类型和泛型所能达到的最好水平了... - Lukas Eder
2个回答

8

像这样(先将其转换为Class原始类型):

@SuppressWarnings({ "unchecked", "rawtypes" })
Class<List<MyType>> clazz = (Class) List.class

谢谢,很遗憾这似乎是做这件事的方式 :( - chris1069603
@chris1069603:实际上,你不需要两个转换。使用原始类型转换应该就足够了。 - Lukas Eder

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接