【问题标题】:In Java, are enum types inside a class static?在Java中,类中的枚举类型是静态的吗?
【发布时间】: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;
    }
}

【问题讨论】:

  • 我不确定我是否完全理解您要描述的内容。可以给个小代码示例吗?

标签: java enums scope


【解决方案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 必须是相同的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-20
      • 2011-06-17
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      相关资源
      最近更新 更多