在我的程序中,我有一个带有泛型参数的抽象基类。在这个类中,我必须得到子类中使用的泛型参数的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中是否有一种方法可以从父类中动态获取它?
答案 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>