2013-04-26 3 views
12

В чем разница между двумя следующими объявлениями ArrayList?ArrayList <> vs ArrayList <Integer>

ArrayList<Integer> nunbers = new ArrayList<Integer>(); 

против

ArrayList<Integer> nunbers = new ArrayList<>(); 

Является ли один из них предпочтительнее, чем другой?

ответ

23

Второй из них имеет свой параметр типа inferred, которое новая вещь в Java 7. <> называется «the diamond».

Также обратите внимание, что type inference itself is not new in Java, но возможность вывести его для экземпляра генерируемого класса является новой.

Составители от релизов до Java SE 7 могут вывести фактические параметры типовых конструкторов, как и общие методы. Однако компиляторы в Java SE 7 и более поздних версиях могут вывести фактические параметры типа генерируемого класса, если вы используете алмаз (<>).

Я бы сказал, что второй вариант предпочтительнее, если вы можете убедиться, что код должен работать только на Java 7, поскольку он более ясен и только уменьшает избыточную информацию.

3

Второй не будет компилироваться, если версия вашего java-компилятора меньше 1.7.

2

Последний ярлык, который можно использовать с Java версии 7 или новее.

3

Второй уменьшает код беспорядок, это новое в Java 7. Но ваш код должен был

List<Integer> nunbers = new ArrayList<>(); 

Так как вы можете закодировать к интерфейсу List типа пары реализации ArrayList выводятся.

2

Они будут компилировать точно такой же код, так как Java 7, вторая вещь, это просто ярлык вы можете использовать, так как это 100% ясно, что принадлежит в <>, можете оставить его пустым

Смежные вопросы