2012-01-28 2 views
3

Java/Hibernate에서 제네릭을 사용하고 싶습니다.Hibernate 4 Generics : @Suppress Warnings 대 Infer Generic Type Arguments?

이 내가 공부했던 책 중 일부는 그 일을 한 방법입니다

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로 generics를 다루는 선호 된 접근 방법이되고 있는가?

답변

2

방법 Query#list()은 안타깝게도 Hibernate 버전 3.5.6-final에서 원시 목록을 반환합니다. 즉,이 메서드의 결과를 컴파일러 경고없이 List<Message> 유형의 변수에 할당 할 수 없습니다. 결과를 할당 할 수있는 유일한 제네릭 유형은 List<?>입니다. 이클립스는 항상 추론 타입 인자 옵션을 제안한다.

// Call to a raw method 
@SuppressWarnings("unchecked") 
List<Message> messages = session.createQuery("from Message").list(); 
: 항상 법의 범위 지정을 사용하는 이클립스는 달리 말했다되고 그건

, 나는 깨끗한 코드에 대한 할당 범위 SuppressWarnings 주석을 제안