从匿名静态实例访问私有实例成员
请考虑以下代码:
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个枚举常量声明(A和B)上遇到编译时错误,但最后2个编译正常(C和D)。错误是:
A 行中的错误 1:无法从静态上下文中
引用非静态变量 i 第 B 行上的错误 2:i 在 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;
}