1. ホーム
  2. java

[解決済み] Javaでは、クラス内のenum型はstaticですか?

2022-07-18 08:18:30

質問

enumの内部からは、内部クラスのように周囲のクラスのインスタンスメンバにアクセスすることができないようです。これは、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;
    }
}

どのように解決するのですか?

はい、ネストされた列挙型は暗黙のうちに静的です。

から 言語仕様 8.9節 :

ネストされた列挙型は暗黙のうちに 静的である。ネストしたenum型を明示的に宣言することは可能です。 ネストしたenum型を明示的に宣言することは を静的と宣言することは可能です。