在Java中,类中的枚举types是静态的吗?

我似乎无法从枚举内部访问周围类的实例成员,因为我可以从内部类中访问。 这是否意味着枚举是静态的? 是否有权限访问周围类的实例的范围,还是必须将实例传递给需要它的枚举方法?

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

是的,嵌套的枚举是隐式静态的。

从语言规范部分8.9 :

嵌套的枚举types是隐式静态的。 显式声明一个嵌套的枚举types是静态的是允许的。

做一个实例级(非静态)的内部枚举类是没有意义的 – 如果枚举实例本身绑定到外部类,他们会打破枚举保证 –

如果你有

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

为了使枚举值正确地作为常量,(psuedocode,忽略访问限制)

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

b1和b2必须是相同的对象。