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

Translate

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

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

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

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
This question and all comments follow the "Attribution Required."

Все ответы

Translate

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

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

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

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

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

Источник