Logger Java: inizializzazione del blocco statico o inizializzazione nella dichiarazione delle variabili


15

Attualmente sto usando il logger nel mio progetto nel modo seguente:

private static final Logger LOGGER;

static{
  LOGGER = logger.getLogger();
}

Ho ricevuto una revisione del codice per l'utilizzo del blocco statico per inizializzare la variabile del logger. Mi è stato detto di inizializzare la variabile logger nella dichiarazione della dichiarazione stessa.

private static final Logger LOGGER = Logger.getLogger();

Sto cercando di capire quale differenza farà se non la inizializzo nel blocco statico. Voglio sapere se questa è una pratica.


8
Non fa alcuna differenza, ma uno di questi prevede più digitazioni e più righe di codice.
user253751

Entrambi genereranno esattamente lo stesso bytecode. Quale preferisci è interamente una questione di gusti,
user207421

Perché non usi Lombok?
Ripristina Monica - M. Schröder il

Risposte:


48

Ad eccezione di alcuni casi angolari davvero bizzarri che coinvolgono la sequenza di inizializzatori, le due alternative funzioneranno esattamente allo stesso modo.

Tuttavia, l'inizializzazione dell'istanza nella dichiarazione è più breve e più familiare e dovrebbe essere preferita solo per quel motivo.

I blocchi di inizializzazione statici sono un costrutto in qualche modo esotico e dovrebbero essere utilizzati solo quando forniscono effettivamente un valore aggiunto, ad esempio quando è necessario gestire le eccezioni.


7
È utile menzionare le eccezioni come un caso raro per l'utilizzo di blocchi statici.
user949300,

4
L'intializzazione di una HashMap è un'altra buona pratica.
RubberDuck,

3
@RubberDuck Anche se i Map.ofmetodi di Java 9 dovrebbero aiutare in questo.
cbojar,

1
@cbojar Map.ofrestituisce comunque una mappa immutabile, quindi se effettivamente ne hai bisogno HashMapdevi comunque farlo alla vecchia maniera. O qualcosa del generenew HashMap(Map.of(...))
kapex il

1
@Kapep Sì, usarlo per passare al costruttore è come lo farei se avessi bisogno di una mappa modificabile invece del blocco di inizializzazione.
cbojar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.