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

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

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

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

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

Ответов (2)

Решение

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

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

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

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

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

Безопасность типов означает, что компилятор будет проверять типы во время компиляции и выдает ошибку, если вы пытаетесь присвоить переменной неправильный тип.