Enum Java中的私人成员

Private members in Enum Java

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class Test {

    public static enum MyEnum {
        valueA(1),valueb(2),valuec(3),valued(4);
        private int i;
        private Object o;

        private MyEnum(int number) {
             i = number;
        }

        public void set(Object o) {
            this.o = o;
        }

        public Object get() {
            return o;
        }


     }

    public static void main(String[] args) {
        System.out.println(MyEnum.valueA.i); // private
    }
}

产量:1

如果它是枚举中的私有成员,为什么会显示1?


因此,外部类可以完全访问其内部类的成员变量。iTest类中可见。

相反,如果MyEnumTest类之外,编译器会抱怨i的可见性,


它是(i)在同一类(myenum)中被引用的成员字段;没有访问修饰符阻止它-在i上定义的私有访问修饰符将阻止它在该类之外的可见性。建议阅读


允许从包含类型到嵌套类型的私有访问,请参见为什么枚举类型上的私有字段对包含类可见?


外部类将拥有对内部类成员的访问权,即使它是私有的,因为您已经在外部类中定义了main方法。


vlaueA被认为是一个静态变量,因此您可以在MyEnum内调用它,因为i在同一个enum与一个类的作用相同,所以MyEnum可以访问valueA,可以访问i