内部クラスの内部からアクセスできるように、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;
}
}
インスタンスレベル(非静的)の内部列挙クラスを作成しても意味がありません-列挙インスタンス自体が外部クラスに関連付けられている場合、列挙の保証が破られます-
例えばもしあれば
public class Foo {
private enum Bar {
A, B, C;
}
}
列挙値が定数として適切に機能するために(疑似コード、アクセス制限を無視)
Bar b1 = new Foo().A
Bar b2 = new Foo().A
b1とb2は同じオブジェクトでなければなりません。