据我了解,内部枚举在Java中始终显式或隐式静态。这意味着我无法从内部枚举类访问实例字段。
public class InnerEnum {
private enum SomeInnerEnum {
VALUE1() {
@Override
public void doSomething() {
// ERROR: WON'T COMPILE
// Cannot make static reference
// to non-static field i
System.out.println(i);
}
},
VALUE2() {
@Override
public void doSomething() {
// do something else with i
}
};
public abstract void doSomething();
}
private int i = 10;
}
我发现只在每个枚举常量中重写方法非常方便,因此可以在外部类中使用它。因为实际上是被禁止的,所以这是Java中不好的编程风格吗?
有什么方法可以通过访问实例变量来创建内部枚举吗?
提前致谢。
最佳答案
enum
是一种编译时结构(预定义),因此,其中的任何外部数据必须在运行时之前可供编译器使用。
除非您将变量(或包含它的引用,在您的情况下为this
)显式传递给enum
内部的方法,否则您将无法对其进行引用。