我想学习更多关于泛型的知识,为此我决定编写一个简单的应用程序。它允许使用
CriteriaQuery
.
首先,我尝试使用
type parameter
(
T型
). 但是,我的代码甚至不会编译。为什么?
private static <T> List<T> retrieveAllT(Session session,
CriteriaBuilder criteriaBuilder, T t) {
CriteriaQuery<t> query = criteriaBuilder.createQuery(t);
Root root = query.from(t);
query.select(root);
return session.createQuery(query).getResultList();
}
我想出了另一个解决办法。它工作得很好,但是编译器会告诉我未检查的强制转换。
我理解其中的原因,但我想知道是否可以用一种更优雅的方式编写这段代码(即不使用未检查的强制转换)?如果是,我该怎么做?
private static List<?> retrieveAll(Session session,
CriteriaBuilder criteriaBuilder, Class clazz) {
CriteriaQuery query = criteriaBuilder.createQuery(clazz);
Root root = query.from(clazz);
query.select(root);
return session.createQuery(query).getResultList();
}
当然,我知道
@SuppressWarnings("unchecked")
.