在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中,类中的枚举类型是静态的吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java中如何调用枚举类中的数组

Java枚举类型在后台响应中的使用

Java高级特性 实用类

java里啥情况用枚举啊

java中的枚举类型

java 枚举类型enum