Javaでは、クラス内の列挙型は静的ですか?


123

内部クラスの内部からアクセスできたように、enumの内部から周囲のクラスのインスタンスメンバーにアクセスできないようです。それは列挙が静的であることを意味しますか?周囲のクラスのインスタンスのスコープへのアクセスはありますか、またはインスタンスを必要な列挙型のメソッドに渡す必要がありますか?

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

あなたが説明しようとしていることを完全に理解しているとは思いません。たぶん、小さなコードサンプルを提供できますか?
ピート

回答:



45

インスタンスレベル(静的ではない)の内部列挙型クラスを作成しても意味がありません。列挙型インスタンス自体が外部クラスに関連付けられている場合、列挙型の保証が破られます-

例えばあなたが持っていた場合

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

enum値が定数として適切に機能するため(アクセス制限を無視して、疑似コード)

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

b1とb2は同じオブジェクトでなければなりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.