2012-01-28 123 views
3

我想在Java/Hibernate中使用泛型。Hibernate 4泛型:@Suppress警告vs推断泛型类型参数?

这是怎么了一些,我一直在学习书本已经做了:

List messages = session.createQuery("from Message").list(); 
System.out.println("Found " + messages.size() + " message(s)."); 

我不喜欢这种做法。我更喜欢使用泛型。

List<Message> messages = session.createQuery("from Message").list(); 
System.out.println("Found " + messages.size() + " message(s)."); 

但是再次,我仍然在我的编辑器上看到“黄色”警告消息。

Eclipse建议我通过使用@SuppressWarnings或推断泛型类型参数来抑制警告。我不确定后者的含义。但是哪一个选项正成为Hibernate处理泛型的首选方法?

回答

2

方法Query#list()不幸的是在Hibernate 3.5.6-Final版本中返回一个原始列表。这意味着,您无法将此方法的结果分配给类型为List<Message>的变量,而无需发出编译器警告。您可以将结果分配到的唯一通用类型是List<?>。 Eclipse总是建议推理类型参数选项。

话虽这么说,不像Eclipse的,它总是使用方法作用域,我建议干净的代码分配范围SuppressWarnings注释:

// Call to a raw method 
@SuppressWarnings("unchecked") 
List<Message> messages = session.createQuery("from Message").list();