Ich kann scheinbar nicht von einer Enumeration aus auf Instanzmitglieder der umgebenden Klasse zugreifen, wie ich es von einer inneren Klasse aus tun könnte. Bedeutet das, dass Aufzählungen statisch sind? Gibt es einen Zugriff auf den Bereich der Instanz der umgebenden Klasse oder muss ich die Instanz an die Methode der Aufzählung übergeben, wo ich sie benötige?
public class Universe {
public final int theAnswer;
public enum Planet {
// ...
EARTH(...);
// ...
// ... constructor etc.
public int deepThought() {
// -> "No enclosing instance of type 'Universe' is accessible in this scope"
return Universe.this.theAnswer;
}
}
public Universe(int locallyUniversalAnswer) {
this.theAnswer = locallyUniversalAnswer;
}
}
Antworten:
Ja, verschachtelte Aufzählungen sind implizit statisch.
Aus der Sprachspezifikation Abschnitt 8.9 :
quelle
Es wäre nicht sinnvoll, eine innere Aufzählungsklasse auf Instanzebene (nicht statisch) zu erstellen. Wenn die Aufzählungsinstanzen selbst an die äußere Klasse gebunden wären, würden sie die Aufzählungsgarantie brechen.
zB wenn du hattest
Damit die Aufzählungswerte ordnungsgemäß als Konstanten fungieren (Pseudocode, Zugriffsbeschränkungen ignorieren)
b1 und b2 müssten die gleichen Objekte sein.
quelle