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

голоса
61

Что смысл предупреждения Java ?

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

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

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Задан 02/08/2008 в 09:58
источник пользователем
На других языках...                            


1 ответов

голоса
50

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

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

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

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

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

Ответил 02/08/2008 в 09:58
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more