错误:java:无法从静态上下文中引用非静态方法a()
我在以下代码上收到此错误。
enum ENUM
{
A()
{
{
a();
}
}
,
;
private void a()
{}
}
我希望它可以编译,但是不会。
将访问级别修饰符 private 从方法a()更改为任何其他,可以编译代码。
什么可能阻止此代码编译?
答案 0 :(得分:0)
您会收到此编译错误,因为此处的 A 之类的枚举常量是隐式静态的。因此,我们可以在任何其他类中使用枚举常量,例如: ENUM.A 。 因此,我们不能从静态上下文中调用非静态方法。 Refer this documentation for more details on enums
答案 1 :(得分:0)
该错误消息具有误导性。它不限于枚举,初始化程序块或其他任何东西。问题很简单,就是匿名内部类无法从其封闭的类访问私有方法。
private
指出子类不应该具有可见性,匿名内部类是子类,因此在逻辑上是合理的。
您可以在此示例中观察到相同的问题:
class Foo {
public static void main(String[] args) {
Foo foo = new Foo(){
void bar() {
a();
}
};
}
private void a(){ /* do nothing */ }
}