6
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

enumのプライベートメンバーの場合、1が表示されるのはなぜですか?

4

5 に答える 5

5

外側のクラスは、内側のクラスのメンバー変数に完全にアクセスできるため、クラスで i表示されTestます。

対照的MyEnumに、クラスの外部にある場合Test、コンパイラは の可視性について不平を言うでしょうi

于 2013-03-09T16:03:47.143 に答える
3

(i) 同じクラス (MyEnum) 内で参照されるメンバー フィールドです。それを妨げるアクセス修飾子はありません - i で定義されたプライベート アクセス修飾子は、このクラスの外での可視性を妨げます。 推奨読書

于 2013-03-09T16:04:17.517 に答える
1

包含型からネストされた型へのプライベート アクセスは許可されています。なぜ列挙型のプライベート フィールドが包含クラスに表示されるのですか? を参照してください。

于 2013-03-09T16:13:43.967 に答える
0

vlaueAは静的変数と見なされるため、クラスと同じように再生されるMyEnumためi、内部で呼び出すことができます。enumMyEnumvalueAi

于 2013-03-09T16:09:07.633 に答える
0

外部クラス内にメソッドを定義しているため、外部クラスはプライベートであっても内部クラスメンバーにアクセスできますmain

于 2013-03-09T16:13:19.177 に答える