En Java, ¿los tipos enum dentro de una clase son estáticos?

Parece que no puedo acceder a los miembros de la instancia de la clase circundante desde dentro de una enumeración, como pude desde dentro de una clase interna. ¿Eso significa que las enumeraciones son estáticas? ¿Hay algún acceso al scope de la instancia de la clase circundante, o tengo que pasar la instancia al método de la enumeración donde lo necesito?

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

    Sí, las enumeraciones anidadas son implícitamente estáticas.

    De la especificación del lenguaje, sección 8.9 :

    Los tipos enum nesteds son implícitamente estáticos. Se permite declarar explícitamente que un tipo de enumeración nested sea estático.

    No tendría sentido crear una clase de enumeración interna a nivel de instancia (no estática); si las instancias enum estuvieran vinculadas a la clase externa, romperían la garantía enum.

    por ejemplo, si tuviste

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

    Para que los valores enum actúen correctamente como constantes, (psuedocode, ignorando las restricciones de acceso)

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

    b1 y b2 tendrían que ser los mismos objetos.