参数类就像一个类

时间:2014-12-23 12:06:42

标签: java generics methods

我想通过参数Entity进行GenericDao传递,但我不知道如何将Entidad转换为Object。我试过放GenericDaoWithOrder<Entidad extends Object>但不起作用。

public abstract class GenericDao<Entidad> {

@PersistenceContext
private EntityManager em;

    public List<Entidad> findAll(Integer start, Integer maxResult) {
        TypedQuery<Entidad> query = em.createNamedQuery(Entidad.class.getCanonicalName() + ".findAll", Entidad.class);            
        query.setFirstResult(start);
        query.setMaxResults(maxResult);
        return query.getResultList();
    }
}

1 个答案:

答案 0 :(得分:1)

在您显示的代码中,Entidad是参数,而不是类名,因此您无法引用Entidad.class。解决此类问题的常用方法是将表示真实类的Class对象传递给GenericDao的构造函数,例如

public abstract class GenericDao<E> {

    @PersistenceContext
    private EntityManager em;

    private Class<E> clazz;

    protected GenericDao(Class<E> clazz) {
        this.clazz = clazz;
    }

    public List<E> findAll(Integer start, Integer maxResult) {
        TypedQuery<E> query = em.createNamedQuery(clazz.getCanonicalName() + ".findAll", clazz);            
        query.setFirstResult(start);
        query.setMaxResults(maxResult);
        return query.getResultList();
    }
}

(我已将类型参数名称缩短为E,以使其更清楚,它是一个参数而不是真实类的名称)。然后,具体的子类传入相关的Class

public class UserDao extends GenericDao<User> {
  public UserDao() {
    super(User.class);
  }
}