在 Java 中参数化 class
Parameterized class in Java
我在这个 Java class 中做错了什么? clazz 字段总是空的。 clazz 不应该自动填充具体 class 上定义的类型吗?
谢谢!
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 中的 Class<T>
字段。如果您的泛型 class 需要知道其中一个类型参数的类型,则必须添加类型为 Class<T>
的构造函数参数并从那里对其进行初始化。例如,参见 JDK.
中的 class EnumMap
我在这个 Java class 中做错了什么? clazz 字段总是空的。 clazz 不应该自动填充具体 class 上定义的类型吗?
谢谢!
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 中的 Class<T>
字段。如果您的泛型 class 需要知道其中一个类型参数的类型,则必须添加类型为 Class<T>
的构造函数参数并从那里对其进行初始化。例如,参见 JDK.
EnumMap