public enum MyEnum1 {
FOO(BAR), BAR(FOO);
private MyEnum1 other;
private MyEnum1(MyEnum1 other) {
this.other = other;
}
public MyEnum1 getOther() {
return other;
}
}
MyEnum1
definiert ist, erzeugt die Fehler Cannot reference a field before it is defined
, was durchaus verständlich ist, da hier die Reihenfolge der Deklaration Angelegenheiten. Aber warum kompiliert sich folgendes?Es scheint, dass ich * ein Feld verweisen kann, bevor es *
public enum MyEnum2 {
FOO { public MyEnum2 getOther() { return BAR; } },
BAR { public MyEnum2 getOther() { return FOO; } };
public abstract MyEnum2 getOther();
}
FOO
bezieht sich auf BAR
vor BAR
definiert ist, bin ich falsch?
Sind 'enum'-Konstanten nicht in Strukturen zusammengefasst, die Klassen ähneln? Wenn Sie 'BAR' zurückgeben, beziehen Sie sich auf einen Typ. Lesen Sie [hier] (http://stackoverflow.com/questions/7276775/what-does-java-compile-an-enumeration-down-to): _set der gültigen Werte wird bei der Typinitialisierung erstellt. Time_ –
[JLS] (http : //docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.1) sagt _Der optionale Klassenkörper einer Enum-Konstante definiert implizit eine anonyme Klassendeklaration (§15.9. 5) das erweitert den unmittelbar einschließenden Enum-Typ. –