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

StackOverflow https://stackoverflow.com/questions/382

Вопрос

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

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

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

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Это было полезно?

Решение

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top