2009-03-19 13 views
106

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

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

私はあなたが何を記述しようとしているかを完全に理解していません。あなたはおそらく小さなコードサンプルを与えることができますか? – Pete

答えて

160

はい、ネストされた列挙型は暗黙的に静的です。 language specification section 8.9から

ネストされたenum型は暗黙的に 静的です。 は、ネストされた列挙型 が静的​​であると明示的に宣言することは許されています。

44

これは、インスタンス・レベル(非静的)内部列挙型クラスを作成する意味がありません -

- 列挙のインスタンスは、それらが列挙保証を破るだろうと外部クラスに自分自身を縛られた場合例えばあなたが適切に(アクセス制限を無視して、擬似コード)の定数として機能する列挙値について

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

を持っていた場合

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

B1とB2は、同じオブジェクトでなければならないであろう。

関連する問題