【发布时间】:2016-11-18 20:30:41
【问题描述】:
我正在使用以下代码实现泛型以访问休眠中的数据:
public static <T> List<T> get(Class<T> clazz,Map map) throws GenericDataAccessException {
List<T> data = null;
Session session = null;
try {
session = HibernateUtilities.getSession();
session.beginTransaction();
Criteria cr = session.createCriteria(clazz.getName());
Iterator itr = map.entrySet().iterator();
while(itr.hasNext()){
Map.Entry entry = ( Map.Entry)itr.next();
cr.add(Restrictions.eq(entry.getKey().toString(),entry.getValue()));
}
data = cr.list();
} catch (Exception e) {
logger.debug("Hibernate Error::" + e.toString());
throw new GenericDataAccessException(e.getMessage());
} finally {
if(session != null) {
session.close();
}
}
return data;
}
但在data = cr.list(); 行显示未检查分配警告。如何在不抑制警告的情况下删除此警告?
如果我将返回类型从通用列表更改为列表,则会删除警告,但在这种情况下,我会在调用此方法的类中收到警告。
【问题讨论】:
-
您可以将
@SuppressWarnings("unchecked")放在您的get()方法之上。但请记住,如果有警告,您很可能在运行时出错。所以实际上你的问题是双重的:如何禁用警告,以及如何应对潜在的随之而来的错误。 -
@Tim Biegeleisen 感谢您的回复,但我不想抑制警告我想用我的代码实现来处理它。有没有其他方法可以让我在没有警告的情况下实现这个方法?
-
如果您想这样做,您需要为您在方法中提到的所有内容提供适当的泛型类型,包括
Map、Iterator和Map.Entry。 -
@LouisWasserman 谢谢。但是这里的 map 和 iterator 仅用于设置标准和限制,那么它将如何影响 cr.list() 的返回类型?