Em Java, os tipos de enumeração dentro de uma classe são estáticos?


123

Parece que não consigo acessar membros de instância da classe circundante de dentro de uma enumeração, como eu poderia de dentro de uma classe interna. Isso significa que as enumerações são estáticas? Existe algum acesso ao escopo da instância da classe circundante ou preciso passar a instância para o método da enumeração em que eu preciso?

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

Não sei se entendi totalmente o que você está tentando descrever. você pode dar um pequeno exemplo de código, talvez?
Pete

Respostas:



45

Não faria sentido criar uma classe enum interna (não estática) no nível da instância - se as instâncias enum estivessem ligadas à classe externa, elas quebrariam a garantia enum -

por exemplo, se você tivesse

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

Para que os valores de enumeração atuem corretamente como constantes (psuedocode, ignorando restrições de acesso)

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

b1 e b2 teriam que ser os mesmos objetos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.