当前位置:  开发笔记 > 编程语言 > 正文

在Java中,类静态中的枚举类型是什么?

如何解决《在Java中,类静态中的枚举类型是什么?》经验,为你挑选了2个好方法。

我似乎无法从枚举中访问周围类的实例成员,因为我可以从内部类中访问.这是否意味着枚举是静态的?是否可以访问周围类的实例的范围,或者我是否必须将实例传递到我需要它的枚举方法中?

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;
    }
}

Jon Skeet.. 171

是的,嵌套枚举是隐式静态的.

从语言规范部分8.9:

嵌套枚举类型是隐式静态的.允许将嵌套的枚举类型显式声明为静态是允许的.


Steve B... 45

创建一个实例级(非静态)内部枚举类是没有意义的 - 如果枚举实例本身与外部类绑定,则它们会破坏枚举保证 -

例如,如果你有

public class Foo {
   private enum Bar {
        A, B, C;
   } 
}

使枚举值正确地充当常量,(伪代码,忽略访问限制)

Bar b1 = new Foo().A
Bar b2 = new Foo().A

b1和b2必须是相同的对象.



1> Jon Skeet..:

是的,嵌套枚举是隐式静态的.

从语言规范部分8.9:

嵌套枚举类型是隐式静态的.允许将嵌套的枚举类型显式声明为静态是允许的.



2> Steve B...:

创建一个实例级(非静态)内部枚举类是没有意义的 - 如果枚举实例本身与外部类绑定,则它们会破坏枚举保证 -

例如,如果你有

public class Foo {
   private enum Bar {
        A, B, C;
   } 
}

使枚举值正确地充当常量,(伪代码,忽略访问限制)

Bar b1 = new Foo().A
Bar b2 = new Foo().A

b1和b2必须是相同的对象.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有