在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必须是相同的对象。