在运行时通过变量设置T模板类型

时间:2019-01-09 12:43:08

标签: java templates

当实例化名为Class的新模板类时,是否可以通过传递TemplateClass变量,还是绝对没有意义?

我想做的但不能编译的示例:

final List<TemplateClass> fields = new ArrayList<>();

public void loadDataFields() {
    for(Field x : ClassA.class.getDeclaredFields()) {
        fields.add(new TemplateClass<x.getClass()>());
    }
}

编辑

这里是TemplateClass

public class TemplateClass<T extends Comparable> {
    int count;
    T min;
    T max; 
}

3 个答案:

答案 0 :(得分:3)

在Java中,由于Type Erasure,泛型被视为(主要是)编译时间信息。

new TemplateClass<x.getClass()>()行没有意义,因为x.getClass()仅在运行时评估。这行会导致编译错误。

答案 1 :(得分:2)

您无法在运行时将Type分配为通用类。

泛型只能在编译时使用

答案 2 :(得分:2)

简而言之-不。

无法在运行时使用动态类实例化模板。那是因为模板是在构建时评估的。