据我了解,内部枚举在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内部的方法,否则您将无法对其进行引用。

10-01 22:32
查看更多