次のコードを検討してください。
enum E {
A { public int get() { return i; } },
B { public int get() { return this.i; } },
C { public int get() { return super.i; } },
D { public int get() { return D.i; } };
private int i = 0;
E() { this.i = 1; }
public abstract int get();
}
最初の 2 つの enum 定数宣言 (A & B) でコンパイル エラーが発生しますが、最後の 2 つは正常にコンパイルされます (C & D)。エラーは次のとおりです。
行 A のエラー 1: 非静的変数 i は静的コンテキストから参照できません
行 B のエラー 2: i has private access in E
インスタンスメソッドであるため、インスタンス変数に思い通りにget
アクセスできない理由がわかりません。i
注:private
の宣言からキーワードを削除i
すると、コードもコンパイル可能になりますが、これもわかりません。
Oracle JDK 7u9 を使用します。
編集
コメントで指摘されているように、これは列挙型に固有のものではなく、以下のコードは同じ動作を生成します。
class E {
static E a = new E() { public int get() { return i; } };
static E b = new E() { public int get() { return this.i; } };
static E c = new E() { public int get() { return super.i; } };
static E d = new E() { public int get() { return d.i; } };
private int i = 0;
}