Momentan verwende ich Logger in meinem Projekt wie folgt:
private static final Logger LOGGER;
static{
LOGGER = logger.getLogger();
}
Ich habe eine Codeüberprüfung für die Verwendung eines statischen Blocks zum Initialisieren der Logger-Variablen erhalten. Ich wurde aufgefordert, die Protokollvariable in der Deklarationsanweisung selbst zu initialisieren.
private static final Logger LOGGER = Logger.getLogger();
Ich versuche herauszufinden, welchen Unterschied es macht, wenn ich es nicht im statischen Block initialisiere. Ich möchte wissen, ob dies eine Praxis ist.
Antworten:
Mit Ausnahme einiger wirklich bizarrer Eckfälle, die die Sequenz der Initialisierer betreffen, funktionieren die beiden Alternativen genau gleich.
Die Initialisierung der Instanz direkt in der Deklaration ist jedoch kürzer und vertrauter und sollte allein aus diesem Grund bevorzugt werden.
Statische Initialisierungsblöcke sind ein etwas exotisches Konstrukt und sollten nur verwendet werden, wenn sie tatsächlich einen Mehrwert bieten, z. B. wenn Sie Ausnahmen behandeln müssen.
quelle
Map.of
Methoden von Java 9 dabei helfen sollten.Map.of
gibt jedoch eine unveränderliche Karte zurück. Wenn Sie also tatsächlich eineHashMap
benötigen, müssen Sie dies immer noch auf die alte Weise tun. Oder so etwas wienew HashMap(Map.of(...))