Hibernate 4 Generics: @Suppress Предупреждения против Infer Generic Тип Аргументы? - PullRequest
3 голосов
/ 29 января 2012

Я хочу использовать дженерики в 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 Ответ

2 голосов
/ 29 января 2012

Метод 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...