Что означает это описание ошибки? - PullRequest
1 голос
/ 28 февраля 2010

При компиляции программы на Java я получил это большое ПРЕДУПРЕЖДЕНИЕ

предупреждение: [не проверено] не проверено вызов LinkedList (java.util.Collection) в качестве члена raw введите java.util.LinkedList

в этой строке:

LinkedList<Integer> li2 = new LinkedList(li);

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

Edit:

Это должен был быть факт: LinkedList<Integer> li2 = new LinkedList<Integer>(li);

Но все же, пожалуйста, ответьте на вопрос.

Ответы [ 2 ]

3 голосов
/ 28 февраля 2010

Необработанные типы не проверяются. Используйте

LinkedList<Integer> li2 = new LinkedList<Integer>(li);

Вы никогда не должны использовать необработанные типы в новом коде. Это предусмотрено только для обратной причины совместимости. См. JLS 4.8

Для облегчения взаимодействия с неуниверсальным унаследованным кодом также можно использовать в качестве типа стирание (§4.6) параметризованного типа (§4.5). Такой тип называется необработанным типом.

Использование необработанных типов разрешено только в качестве уступки совместимости устаревшего кода. Использование необработанных типов в коде, написанном после введения универсальности в язык программирования Java, настоятельно не рекомендуется. Возможно, что будущие версии языка программирования Java запретят использование необработанных типов.

Акцент был их, а не мой.


Вы добавили исправление в исходный вопрос, означающее, что вы хотите работать именно с необработанными типами. Кажется, это противоречит цели безопасности типов, обеспечиваемой обобщениями, но вы всегда можете использовать List<Object> для достижения этой цели. Он больше не сырой, поэтому он гарантированно сработает в будущем, хотя на самом деле он не обеспечивает никакой безопасности типов.

В зависимости от контекста вы также можете сделать List<?> для неограниченных подстановочных знаков.

0 голосов
/ 28 февраля 2010

LinkedList при вызове конструктора следующим образом:

LinkedList<Integer> li2 = new LinkedList<Integer>(li);

Необработанный тип - это тип, имеющий аргумент типа, но используемый без аргумента. Он поддерживается по старым причинам, но вы никогда не должны использовать его в новом коде.

...