Иногда разработчики сталкиваются с необходимостью инициализации коллекций в Java. Существует несколько способов решения этой задачи, одним из которых является инициализация двойными фигурными скобками.
Пример:
Set<String> mySet = new HashSet<String>() {{ add("element1"); add("element2"); add("element3"); }};
Этот подход к инициализации представляет собой создание анонимного внутреннего класса с инициализатором экземпляра внутри него.
Однако возникает ряд вопросов:
- Насколько неэффективен этот способ инициализации?
- Как работает данный механизм и что означает «this» в нем?
- Насколько данный подход сложен для понимания и можно ли его использовать в производственном коде?
Ответ на первый вопрос зависит от конкретных условий. Вообще говоря, созданный код должен выполняться быстро. Однако дополнительные .class файлы могут немного замедлить загрузку программы и увеличить размер jar-файла.
Второй вопрос весьма интересен. В данной конструкции анонимный внутренний класс расширяет класс объекта, создаваемого оператором new, и поэтому имеет значение «this», которое ссылается на создаваемый экземпляр.
Третий вопрос трудно однозначно ответить. Некоторые разработчики считают, что данная конструкция может быть сложной для понимания, особенно для тех, кто только начинает изучать Java. Поэтому рекомендуется оставлять комментарии в коде, особенно если он будет передан другим разработчикам.
В общем, инициализация двойными фигурными скобками может быть полезной, но есть и другие способы инициализации коллекций, такие как Arrays.asList, varargs методы, Google Collections и предлагаемые в Java 7 литералы коллекций. Использование этих альтернатив может упростить код и сделать его более понятным.
Добавить комментарий