Что означает предупреждение о безопасности типов в определенных приведениях Java-обобщений?

В чем смысл предупреждения Java ?

Безопасность типов: приведение от объекта к списку <Integer> фактически проверяет на соответствие стертому типу списка

Я получаю это предупреждение, когда пытаюсь привести Object к типу с общей информацией, такой как в следующем коде:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
2.08.2008 08:58:27
Если вы хотите избавиться от желтого подчеркивания в Eclipse, но не хотите добавлять @SuppressWarning, у вас есть возможность игнорировать предупреждение в настройках. В окне настроек выберите «Java»> «Компилятор»> «Ошибки / предупреждения» , затем в разделе « Универсальные типы » измените параметр « Операция универсального типа Unchecked» на « Игнорировать»
Axel 15.01.2013 10:28:37
1 ОТВЕТ
РЕШЕНИЕ

Это предупреждение возникает потому, что Java на самом деле не хранит информацию о типе во время выполнения в объекте, который использует обобщения. Таким образом, если objectэто на самом деле a List<String>, во время выполнения не будет, ClassCastExceptionза исключением тех случаев, когда к списку обращаются к элементу, который не соответствует универсальному типу, определенному в переменной.

Это может вызвать дальнейшие осложнения, если элементы будут добавлены в список с этой неверной информацией общего типа. Любой код, все еще содержащий ссылку на список, но с правильной информацией об общем типе, теперь будет иметь противоречивый список.

Чтобы удалить предупреждение, попробуйте:

List<?> list = (List<?>) object;

Однако обратите внимание, что вы не сможете использовать определенные методы, такие как add, потому что компилятор не знает, пытаетесь ли вы добавить объект неправильного типа. Вышеприведенное будет работать во многих ситуациях, но если вам нужно использовать add или какой-либо аналогично ограниченный метод, вам просто придется перенести желтое подчеркивание в Eclipse (или SuppressWarningаннотацию).

50
29.12.2015 06:32:32