【问题标题】:Java Generics Pass .class ReferenceJava 泛型传递 .class 参考
【发布时间】:2012-08-21 16:27:59
【问题描述】:

我需要调用一个超级构造函数,该构造函数需要我传递泛型类型的.class 引用。如何使用 Java 实现这一点?

构造函数想要..

Class<List<MyType>>

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

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

【问题讨论】:

  • 哦,我想现在我在 Stackoverflow 上找到了答案。希望有一个更清洁的解决方案 (Class>)(Class>)List.class
  • 不幸的是,这与 Java 的 Class 类型和泛型一样好......

标签: java generics


【解决方案1】:

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

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

【讨论】:

  • 谢谢,可悲的是这似乎是这样做的方式:(
  • @chris1069603:实际上,你不需要两个演员表。使用原始类型转换就足够了
【解决方案2】:

你不能调用List&lt;MyType&gt;的构造函数,事实上你不能调用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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多