[英]Parameterized class in Java
在這個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<T>
字段。 如果您的泛型類需要知道類型參數之一的類型,則必須添加Class<T>
類型的構造函數參數,然后從那里對其進行初始化。 例如,請參見JDK中的EnumMap
類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.