In Java, ci sono tipi di enum all’interno di una class statica?

Non riesco ad accedere ai membri dell’istanza della class circostante da un enum, come potrei dall’interno di una class interiore. Ciò significa che le enumerazioni sono statiche? C’è qualche accesso all’ambito dell’istanza della class circostante, o devo passare l’istanza nel metodo di enum dove ne ho bisogno?

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; } } 

Solutions Collecting From Web of "In Java, ci sono tipi di enum all’interno di una class statica?"

Sì, le enumerazioni annidate sono implicitamente statiche.

Dalla sezione delle specifiche del linguaggio 8.9 :

I tipi enumerati nidificati sono implicitamente statici. È consentito dichiarare esplicitamente un tipo enum nidificato come statico.

Non avrebbe senso creare una class enum interna a livello di istanza (non statica) – se le istanze enum fossero esse stesse legate alla class esterna avrebbero rotto la garanzia enum –

ad es. se lo avessi

 public class Foo { private enum Bar { A, B, C; } } 

Affinché i valori enum agiscano correttamente come costanti, (psuedocode, ignorando le restrizioni di accesso)

 Bar b1 = new Foo().A Bar b2 = new Foo().A 

b1 e b2 dovrebbero essere gli stessi oggetti.