2012-01-28 122 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();