Come già affermato da @yshavit non è possibile dichiarare inizializzatori statici, ma da quello che ho trovato è possibile aggirare il problema dichiarando un metodo per eseguire le inizializzazioni desiderate e chiamarlo semplicemente quando si definiscono i campi della classe. Per esempio ho implementato questo iteratore (questa è una classe interna anonima):
public Iterator<String> iterator() {
return new Iterator<String>() {
int someField = initializeIterator();
// Keeps current position in the list of direct neighboring out
private int initializeIterator() {
// Do your initializations
}
@Override
public boolean hasNext() {
//hasNext implementation
}
@Override
public Vertex next() {
//next implementation
}
//...
questo si sente molto hack-y e mi chiedo se mi manca qualcosa, ma questo funziona del tutto e il metodo di inizializzazione viene chiamato solo una volta solo come un blocco di inizializzazione statico sarebbe ...
Nella mia esperienza, in circa l'80% delle volte, una classe nidificata è ciò che le persone volevano definire comunque. In questo caso il numero minimo di parole chiave sta danneggiando Java; come designer del linguaggio potresti voler rendere le classi nidificate come predefinite e avere una parola chiave "interiore" per le classi interne. –