Java 从父类获取泛型类对象

Java 从父类获取泛型类对象,java,Java,在我的程序中,我有一个带有泛型参数的抽象基类。在这个类中,我必须获得子类中使用的泛型参数的class对象。目前我是这样做的: public abstract class BaseItem<T> public BaseItem(int id, Class<T> childGenricClass) { //... } } public class MainItem extends BaseItem<String> { pu

在我的程序中,我有一个带有泛型参数的抽象基类。在这个类中,我必须获得子类中使用的泛型参数的
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);
    }
}
公共抽象类BaseItem
公共BaseItem(int id,类childGenricClass){
//...
}
}
公共类MainItem扩展了BaseItem{
公共主项(内部id){
super(id,String.class);
}
}

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

这是正确的,因为
JVM
在运行时删除所有类型。在运行时,您的
T
始终是
对象
,因此您的应用程序没有任何机会找出
T
的类别。因此,您必须另外添加
类cls
变量。

您可以这样做(尽管传递类在imo中更好):

公共抽象类BaseItem{
公共基本项(int-id){}
公共类getGenericClass(){
返回(类)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
}
新建MainItem().getGenericClass();//返回类
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>