Java - 如何将Generic参数作为Class <T>传递给构造函数

Joe*_*ore 1 java generics inheritance

我这里有一个问题仍然无法解决,问题是我有这个抽象类:

public abstract class AbstractBean<T> {
    private Class<T> entityClass;

    public AbstractBean(Class<T> entityClass) {
        this.entityClass = entityClass;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在我有另一个继承这个抽象的类:

@Stateless
@LocalBean
public class BasicUserBean<T extends BasicUser> extends AbstractBean<T>  {
    private Class<T> user;    

    public BasicUserBean() {  
        super(user);  // Error: cannot reference user before supertype contructor has been called.
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何让它工作?,我试图让BasicUserBean类继承,所以如果我有继承BasicUserBean的PersonBean,那么我可以在Generic中设置实体Person,它也继承了实体BasicUser.它最终会成为:

@Stateless
@LocalBean
public class PersonBean extends BasicUserBean<Person>  {

    public PersonBean() {
        super(Person.class);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我只想继承BasicUserBean到所有后代的基本功能,所以我不必在所有后代中重复相同的代码.谢谢!.

Joh*_*erg 6

你需要添加构造函数来BasicUserBean获取Class<T>

public BasicUserBean(Class<T> entityClass) {
    super(entityClass);
}
Run Code Online (Sandbox Code Playgroud)

你的无参数构造函数将无法工作,因为你扩展的类需要一个T.你不能有一个T在构造函数中没有考虑在T作为参数; 反正不是没有演员.