Como ya lo indicó @yshavit no se pueden declarar los inicializadores estáticos, pero por lo que encontré, puedes evitarlo declarando un método para hacer las inicializaciones que quieras y simplemente llamarlo para definir los campos de tu clase. Por ejemplo he implementado este iterador (esto es una clase interna anónima):
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
}
//...
Esto se siente muy Hack-Y y me pregunto si me falta algo, pero esto funciona totalmente y el método de inicialización sólo se le llama una vez sólo como un bloque de inicialización estático sería ...
En mi experiencia, en aproximadamente el 80% de las veces, una clase anidada es lo que la gente quería definir de todos modos. En este caso, el número mínimo de palabras clave está perjudicando a Java; como diseñador de idiomas, es posible que desee hacer que las clases anidadas sean las predeterminadas y tener una palabra clave "interna" para las clases internas. –