我有一个枚举类型类:
public enum Operation {
PLUS() {
@Override
double apply(double x, double y) {
// ERROR: Cannot make a static reference
// to the non-static method printMe()...
printMe(x);
return x + y;
}
};
private void printMe(double val) {
System.out.println("val = " + val);
}
abstract double apply(double x, double y);
}
正如你在上面看到的,我定义了一个enum
有价值的类型PLUS
。它包含一个特定的常量主体。在它的身体里,我试图呼唤printMe(val);
,但我得到了编译错误:
无法对非静态方法 printMe() 进行静态引用。
为什么我会收到此错误?我的意思是我正在重写一个抽象方法PLUS
身体。为什么它在static
范围?如何摆脱它?
我知道添加一个static
关键字printMe(){...}
解决了问题,但我有兴趣知道如果我想保留是否还有其他方法printMe()
非静态?
另一个问题,与上面的问题非常相似,但是这次错误消息听起来相反,即PLUS(){...}
具有非静态上下文:
public enum Operation {
PLUS() {
// ERROR: the field "name" can not be declared static
// in a non-static inner type.
protected static String name = "someone";
@Override
double apply(double x, double y) {
return x + y;
}
};
abstract double apply(double x, double y);
}
我尝试声明一个PLUS
-具体的static
变量,但最终出现错误:
字段“name”不能在非静态内部类型中声明为静态。
为什么我不能在里面定义静态常量PLUS
if PLUS
是匿名类吗?这两个错误消息听起来相互矛盾,正如第一个错误消息所示PLUS(){...}
has static上下文,而第二条错误消息显示PLUS(){...}
has 非静态语境。我现在更迷茫了。