2008-08-02 15 views
61

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

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

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

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

Если вы хотите избавиться от желтой подчеркивания в Eclipse, но не хотите добавлять `@ SuppressWarning`, у вас есть возможность игнорировать предупреждение в настройках. В окне настроек перейдите в _Java> Compiler> Errors/Warnings_, затем в разделе _Generic types_ измените параметр ** Непроверенный общий тип операции ** на ** Игнорировать ** – Axel 2013-01-15 10:28:37

ответ

50

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

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

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

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

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