Избегайте предупреждений о безопасности типов с помощью запроса критериев Hibernate - PullRequest
5 голосов
/ 26 января 2012
final Criteria crit = session.createCriteria(MyClass.class);
final List<MyClass> myClassList = crit.list();

результатов в этом: Безопасность типов: для выражения типа List необходимо выполнить непроверенное преобразование для соответствия List

Это метод удаления предупреждения, так как я получаю сообщение об ошибке:

final List<MyClass> myClassList = Collections.checkedList(MyClass.class, crit.list());

Ответы [ 3 ]

6 голосов
/ 26 января 2012

Ну, вы можете использовать:

@SuppressWarnings("unchecked")

перед объявлением ...

Обратите внимание, что это только подавит предупреждение - оно не сделает ничего, чтобы сделать код более безопасным,В этом случае я лично был бы достаточно рад этому;Я бы доверял Hibernate, чтобы поступать правильно.

4 голосов
/ 26 января 2012

В вашем коде

final List<MyClass> myClassList 
    = Collections.checkedList(MyClass.class, crit.list());

вам просто нужно изменить порядок аргументов на checkedList().

Кстати, вы можете статически импортировать метод, чтобы сделать ваш код более кратким.Также, кстати, я не знал о checkedList() - спасибо за хедз-ап!

Редактировать : checkedList() не делает то, что вы хотите - как я должен был понятьесли я правильно подумаю об этом, прежде чем ответить.

checkedList() проверит типы любых элементов, добавленных в список, и сразу же потерпит неудачу.В отличие от обычного списка, который позволит вам ввести неправильные типы, и потерпит неудачу только при получении.В вашем случае это не имеет значения, поскольку вы сами не собираетесь вставлять элементы (я полагаю).

Ответ Джона Скита (@SuppressWarnings("unchecked")) является правильным.

1 голос
/ 27 июня 2013

Для меня лучший способ избежать предупреждения безопасности типов - это, как Matt Quail говорит в этом посте: Как избежать предупреждений безопасности типов с результатами Hibernate HQL? , написание помощника приведения, но сКритерии вместо запросов, например:

@SuppressWarnings("unchecked")
public static <T> List<T> listAndCast(Criteria crit) {
  List<T> list = crit.list();
  return list;
}

И только вы должны вызывать этот метод:

List<MyClass> myClassList = listAndCast(crit);

Привет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...