【问题标题】:Parameterized class in JavaJava中的参数化类
【发布时间】:2015-09-18 20:12:26
【问题描述】:

我在这个 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
}

【问题讨论】:

标签: java class parameterized


【解决方案1】:

不,Java 中的任何内容都不会自动填充泛型类中的 Class&lt;T&gt; 字段。如果您的泛型类需要知道其中一个类型参数的类型,则必须添加 Class&lt;T&gt; 类型的构造函数参数并从那里初始化它。例如,请参见 JDK 中的 EnumMap 类。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多