代码之家  ›  专栏  ›  技术社区  ›  Joao Brito

Java中的参数化类

  •  0
  • Joao Brito  · 技术社区  · 9 年前

    我在这个Java类中做错了什么?clazz字段始终为空。clazz不应该自动填充在具体类上定义的类型吗?

    谢谢

    public abstract class AbstractDAO<E extends Domain, T extends Number> {
    
        protected EntityManager em;
        private Class<E> clazz;
    
        public AbstractDAO(final EntityManager em) {
            this.em = em;
        }
    
        public E find(T id) {
            return em.find(clazz, id);
        }
    
        public List<E> findAll() {
            CriteriaBuilder cb = em.getCriteriaBuilder();
            CriteriaQuery<E> cq = cb.createQuery(clazz);
            Root<E> from = cq.from(clazz);
            CriteriaQuery<E> select = cq.select(from);
            return em.createQuery(select).getResultList();
        }
    
        // other methods
    }
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   bmargulies    9 年前

    不,Java中没有自动填充 Class<T> 泛型类中的字段。如果泛型类需要知道其中一个类型参数的类型,则必须添加类型为的构造函数参数 类别<T> 并从那里初始化它。例如,请参见 EnumMap 在JDK中。