在Java中,类中的枚举类型是静态的吗?
Posted
技术标签:
【中文标题】在Java中,类中的枚举类型是静态的吗?【英文标题】:In Java, are enum types inside a class static? 【发布时间】:2010-10-14 09:52:41 【问题描述】:我似乎无法从枚举内部访问周围类的实例成员,就像我可以从内部类内部一样。这是否意味着枚举是静态的?是否可以访问周围类的实例的范围,或者我是否必须将实例传递给我需要的枚举方法?
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;
【问题讨论】:
我不确定我是否完全理解您要描述的内容。可以给个小代码示例吗? 【参考方案1】:是的,嵌套枚举是隐式静态的。
来自language specification section 8.9:
嵌套枚举类型是隐式的 静止的。是允许的 显式声明嵌套枚举类型 是静态的。
【讨论】:
【参考方案2】:创建一个实例级(非静态)内部枚举类是没有意义的 - 如果枚举实例本身绑定到外部类,它们会破坏枚举保证 -
例如如果你有
public class Foo
private enum Bar
A, B, C;
为了让枚举值正确地充当常量,(伪代码,忽略访问限制)
Bar b1 = new Foo().A
Bar b2 = new Foo().A
b1 和 b2 必须是相同的对象。
【讨论】:
以上是关于在Java中,类中的枚举类型是静态的吗?的主要内容,如果未能解决你的问题,请参考以下文章