Ньюанс по дженерикам

349
23 января 2017, 18:38

Вопрос может показаться крайне простым, однако, самую очевидную информацию, порой, бывает сложно "загуглить". В пример предложу инициацию ArrayList:

ArrayList<String> someList = new ArrayList<>();

Стоит ли указывать тип хранимых в списке объектов еще и в правой части выражения, в угловых скобках? Какова роль такой двойной инициализации. Часто, в чужом коде, вижу и подобную запись:

ArrayList<String> someList = new ArrayList<String>();

Однако, IDE подчеркивает второй "String" серым цветом, и указывает, что тип можно второй раз не указвать вообще. Но, если такая возможность существует, значит бывают ситуации, когда это необходимо. Прошу объяснить, когда.

Answer 1

Это так называемый оператор diamond (бриллиант, алмаз). Введен в Java SE 7. Он называется так, потому что чем-то похож на камень: <>.

до Java 7

ArrayList<String> someList = new ArrayList<String>();

после Java 7

ArrayList<String> someList = new ArrayList<>();

Включение оператора алмазов (<>) в Java SE 7 означает, что код, который создает универсальные классы может быть более компактным и удобочитаемым.

Так что не обязательно указывать тип хранимых в списке объектов еще и в правой части выражения, в угловых скобках.

READ ALSO
Помогите с Hibernate не создаются таблицы

Помогите с Hibernate не создаются таблицы

Помогите hibernate не создает таблицыВозможно нарушен мапинг!

417
Модификатор strictfp

Модификатор strictfp

Для чего нужен данный модификатор? И с чем его можно использовать?

338