该错误消息令人困惑。
问题是,当你给一个枚举值代码时,你正在创建一个枚举的匿名子类。 (其类将为EnumWithAbstractMethodAndMembers$1
)子类不能访问其超类的私有成员,但嵌套类可以通过生成的访问器方法。你应该能够访问私人领域,它给你的错误信息似乎是不正确的。
顺便说一句你可以使用这个,但你不应该需要恕我直言。
public int addValue(final int value) {
return super.memberVariable + value;
}
下面是一个较短的例子,我将记录在错误信息的错误,因为它不会导致解决问题的办法。
public enum MyEnum {
One {
public int getMemberVariableFailes() {
// error: non-static variable memberVariable cannot be referenced from a static context
return memberVariable;
}
public int getMemberVariable2OK() {
return memberVariable2;
}
public int getMemberVariableOK() {
return super.memberVariable;
}
};
private final int memberVariable = 1;
final int memberVariable2 = 1;
}
基于汤姆Hawkin的反馈,这个例子中得到相同的错误消息。
public class MyNotEnum {
// this is the static context in which the anonymous is created
public static final MyNotEnum One = new MyNotEnum() {
public int getMemberVariableFailes() {
// error: non-static variable memberVariable cannot be referenced from a static context
return memberVariable;
}
public int getMemberVariableOK() {
return super.memberVariable;
}
};
private final int memberVariable = 1;
}
比较
public class MyNotEnum {
public class NestedNotEnum extends MyNotEnum {
public int getMemberVariableFailes() {
// compiles just fine.
return memberVariable;
}
public int getMemberVariableOK() {
return super.memberVariable;
}
}
private final int memberVariable = 1;
}
Sound的合理性。 Thx的答案和'超级'的提示! – Andreas
我将它记录为'javac'的错误。 –
他们说它应该在几天内可见。 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7119746我注意到Oracle接受我的错误**比Sun快得多。 –