public enum MyEnum1 {
FOO(BAR), BAR(FOO);
private MyEnum1 other;
private MyEnum1(MyEnum1 other) {
this.other = other;
}
public MyEnum1 getOther() {
return other;
}
}
MyEnum1
genera l'errore Cannot reference a field before it is defined
, che è abbastanza comprensibile, dal momento che le questioni di ordine dichiarazione qui. Ma perché compila il seguente?Sembra che posso * riferimento a un campo prima che venga definita *
public enum MyEnum2 {
FOO { public MyEnum2 getOther() { return BAR; } },
BAR { public MyEnum2 getOther() { return FOO; } };
public abstract MyEnum2 getOther();
}
FOO
si riferisce alla prima BAR
BAR
è definito, mi sbaglio?
Le costanti di 'enum' non sono compilate in strutture simili alle classi? Tornando a 'BAR', ti stai effettivamente riferendo a un tipo. Leggi [qui] (http://stackoverflow.com/questions/7276775/what-does-java-compile-an-enumeration-down-to): _set di valori validi viene creato al momento dell'inizializzazione del tipo_ –
[JLS] (http : //docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.1) dice _Il corpo facoltativo della classe di una costante enum definisce implicitamente una dichiarazione di classe anonima (§15.9. 5) che estende il tipo di enum immediatamente racchiuso. –