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

我似乎无法像从内部类内部那样从枚举内部访问周围类的实例成员。这是否意味着枚举是静态的?是否可以访问周围类的实例的范围,还是必须在需要的地方将实例传递给枚举的方法?


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;

    }

}


料青山看我应如是
浏览 1668回答 2
2回答

白衣染霜花

是的,嵌套枚举是隐式静态的。从语言规范第8.9节开始:嵌套枚举类型是隐式静态的。可以将嵌套枚举类型显式声明为静态。

沧海一幻觉

创建实例级(非静态)内部枚举类是没有意义的-如果枚举实例本身与外部类绑定,则它们会破坏枚举保证-例如,如果你有public class Foo {   private enum Bar {        A, B, C;   } }为了使枚举值正确地充当常量,(伪代码,忽略访问限制)Bar b1 = new Foo().ABar b2 = new Foo().Ab1和b2必须是相同的对象。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java