Сведения о вопросе

Ислам

16:03, 1st July, 2020

Теги

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

Просмотров: 448   Ответов: 1

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

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

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

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



  Сведения об ответе

appple

18:03, 1st July, 2020

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

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться