Hibernate 4 Generics:@Suppress Warnings vs Infer Generic Type Arguments?

时间:2012-01-28 20:30:19

标签: java hibernate generics

我想在Java / Hibernate中使用泛型。

这就是我一直在研究的一些书籍的方式:

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处理泛型的首选方法?

1 个答案:

答案 0 :(得分: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();