Рассмотрим следующий код:
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();
}
Я получаю ошибки времени компиляции в первых двух объявлениях констант континуума (A и B), но последние 2 компилируют штраф (C и D). Ошибки:
Ошибка 1 в строке A: нестатическая переменная я не может ссылаться на статический контекст
Ошибка 2 в строке B: у меня есть частный доступ в 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;
}