В чем смысл предупреждения безопасности типа в некоторых примерах генерирования Java?

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

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

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

Object object = getMyList();
List<Integer> list = (List<Integer>) object;

Ответ 1

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

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

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

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

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