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

Что означает предупреждение Java ?

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

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

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

1 Ответ

50 голосов
/ 02 августа 2008

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

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

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

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

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

...