Obecnie używam loggera w moim projekcie w następujący sposób:
private static final Logger LOGGER;
static{
LOGGER = logger.getLogger();
}
Otrzymałem recenzję kodu za użycie bloku statycznego do zainicjowania zmiennej rejestratora. Powiedziano mi, aby zainicjalizować zmienną rejestrującą w samej instrukcji deklaracji.
private static final Logger LOGGER = Logger.getLogger();
Próbuję dowiedzieć się, jaka to będzie różnica, jeśli nie zainicjuję tego w bloku statycznym. Chcę wiedzieć, czy to jest praktyka.
Odpowiedzi:
Z wyjątkiem niektórych naprawdę dziwnych przypadków narożnych obejmujących sekwencję inicjalizacji, dwie alternatywy będą działać dokładnie tak samo.
Jednak inicjowanie instancji bezpośrednio w deklaracji jest krótsze i bardziej znane i powinno być preferowane tylko z tego powodu.
Statyczne bloki inicjujące są dość egzotyczną konstrukcją i powinny być używane tylko wtedy, gdy faktycznie zapewniają wartość dodaną, na przykład gdy trzeba obsługiwać wyjątki.
źródło
Map.of
metody Java 9 powinny w tym pomóc.Map.of
zwraca jednak niezmienną mapę, więc jeśli faktycznie potrzebujeszHashMap
, musisz zrobić to po staremu. Lub coś w stylunew HashMap(Map.of(...))