Java: инициализация ArrayList (разница между двумя строками кода) - PullRequest
2 голосов
/ 29 февраля 2012

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

(Предположим, я создал класс с именем Cow ..)

ArrayList<Cow> c1 = new ArrayList<Cow>();

ArrayList<Cow> c2 = new ArrayList();

Заранее спасибо за ваше объяснение.

Ответы [ 2 ]

7 голосов
/ 29 февраля 2012

В настоящее время, по существу, нет никакой разницы из-за стирания типа . Первая форма является предпочтительной; вторая форма использует raw type и поддерживается только для обратной совместимости со старыми версиями Java. Хороший компилятор выдаст вам предупреждения, если вы его используете.

Как * Спецификация языка Java , третье издание, & sect; 4.8 объясняет:

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

(выделено оригиналом).

1 голос
/ 29 февраля 2012

Как только что указал ruakh, первый вариант предпочтителен, и на самом деле никаких различий во время выполнения не будет.

Объяснено более простыми словами: в обеих строках вы объявляете список Корова В первой строке вы создаете экземпляр со списком Корова .Во втором вы создаете его экземпляр со списком Object (а Cow является подклассом Object ).

Было бы еще лучше объявить его какинтерфейс списка список .

List<Cow> listOfCows = new ArrayList<Cow>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...