从父类获取泛型Class对象

时间:2018-06-09 10:55:49

标签: java

在我的程序中,我有一个带有泛型参数的抽象基类。在这个类中,我必须得到子类中使用的泛型参数的Class对象。目前我这样做:

public abstract class BaseItem<T>
    public BaseItem(int id, Class<T> childGenricClass) {
        //...
    }
}

public class MainItem extends BaseItem<String> {
    public MainItem(int id) {
        super(id, String.class);
    }
}

我是否真的必须通过构造函数将类传递给父类,或者Java中是否有一种方法可以从父类中动态获取它?

2 个答案:

答案 0 :(得分:1)

这是正确的,因为JVM在运行时删除了所有类型。在运行时,您的T始终为Object,因此您的应用程序无法找到T的类别。因此,您必须另外添加Class<T> cls变量。

答案 1 :(得分:0)

你可以这样的东西(尽管传递类更好):

public abstract class BaseItem<T> {
    public BaseItem(int id) {}

    public Class<T> getGenericClass() {
        return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
    }
}

new MainItem().getGenericClass(); // returns Class<String>