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;
}
}
Respostas:
Sim, enumerações aninhadas são implicitamente estáticas.
Na seção de especificação de idioma 8.9 :
fonte
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
Para que os valores de enumeração atuem corretamente como constantes (psuedocode, ignorando restrições de acesso)
b1 e b2 teriam que ser os mesmos objetos.
fonte