В настоящее время я использую регистратор в своем проекте следующим образом:
private static final Logger LOGGER;
static{
LOGGER = logger.getLogger();
}
Я получил обзор кода для использования статического блока для инициализации переменной регистратора. Мне сказали инициализировать переменную logger в самом объявлении.
private static final Logger LOGGER = Logger.getLogger();
Я пытаюсь выяснить, что изменится, если я не инициализирую его в статическом блоке. Я хочу знать, если это практика.
Ответы:
За исключением некоторых действительно причудливых угловых случаев, связанных с последовательностью инициализаторов, эти две альтернативы будут работать точно так же.
Однако инициализация права экземпляра в объявлении короче и более знакома, и ее следует предпочитать только по этой причине.
Блоки статической инициализации являются довольно экзотической конструкцией и должны использоваться только тогда, когда они действительно обеспечивают добавленную стоимость, например, когда вам нужно обработать исключения.
источник
Map.of
методы Java 9 должны помочь с этим.Map.of
возвращает неизменную карту, поэтому, если вам действительно нужна карта,HashMap
вам все равно нужно сделать это по-старому. Или что-то вродеnew HashMap(Map.of(...))