Java模板:从Generic Type获取构造函数

时间:2017-02-10 03:28:56

标签: java generics

天才。

我正在使用以下代码提取用户定义的提取(T)。

public class Extractor<T extends MostSimpleExtract> {

    private final Constructor<? extends T> extractConstructor;

    public Extractor(Class<T> ExtractClass) throws NoSuchMethodException {
        this.extractConstructor = ExtractClass.getConstructor();
    }

}

所以我必须实例化我的提取器,如:

Extractor<MostSimpleExtract> extractor = new Extractor<>(MostSimpleExtract.class);

但是我不需要传递类参数(MostSimpleExtract.class)来使用ArrayList:

ArrayList<MostSimpleExtract> extractList = new ArrayList<>();

将类参数传递给构造函数似乎是多余的,因为类信息已经在括号内。

如何在不将类参数传递给构造函数的情况下声明类以获取使用泛型类型T的构造函数?

编辑:

我的意思是,如果有任何方法可以在不传递类参数的情况下获取构造函数,那么,我想实例化我的Extractor类,如:

Extractor<MostSimpleExtract> extractor = new Extractor<>();

1 个答案:

答案 0 :(得分:1)

在编译时,您将不会获得有关泛型类型(T)的任何信息。 Java编译器还会擦除泛型方法参数和构造函数中的类型参数。(https://docs.oracle.com/javase/tutorial/java/generics/genMethods.html

编译的通用代码实际上只是在你谈论T

时使用java.lang.Object

我认为,你别无选择,你应该将一个类参数传递给一个构造函数。