Così come è possibile aggiungere ad una classe un inizializzatore statico che viene eseguito prima di qualsiasi utilizzo della classe:
public class MiaClasse {
static {
// Codice da eseguire
}
}
ho scoperto che è possibile aggiungere un inizializzatore di istanza:
public class MiaClasse {
{
// Codice da eseguire
}
}
Il codice dell'inizializzatore di istanza viene eseguito dopo l'inizializzazione degli attributi della classe ma prima del costruttore.
Con questo inizializzatore non solo è possibile fattorizzare la parte comune dell'inizializzazione di una classe, che spesso viene ripetuta in ciascun costruttore, ma è fondamentale soprattutto per l'inizializzazione delle istanze di classi anonime, che non possiedono un costruttore. Sarà infatti possibile scrivere:
new ParentClass() {
{
//codice di inizializzazione della classe anonima
}
// resto della classe anonima
};
Questo permette una tecnica detta Double Braced Initialization per l'inizializzazione delle Collection e delle Map. Basta infatti usare la seguente sintassi:
Map m = new HashMap() {{
put("primo", 1L);
put("secondo", 2L);
put("terzo", 3L);
}};
per avere in m una Map subito pronta.
Nessun commento:
Posta un commento