非静态上下文中的内部枚举

fer*_*rck 6 java enums instance-variables inner-classes

据我所知,内部枚举总是在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;
}
Run Code Online (Sandbox Code Playgroud)

我发现在每个枚举常量中重写方法非常方便,所以我可以在我的外部类中使用它.在java中它是一个糟糕的编程风格,因为它实际上是被禁止的?

有没有办法创建内部枚举与访问我的实例变量?

提前致谢.

yam*_*tes 2

有没有办法创建内部枚举来访问我的实例变量?

Anenum是一种编译时构造(预定义),因此,其中的任何外部数据都必须在运行时可供编译器使用。

除非您显式地将变量(或在您的情况下包含变量的某个引用this)传递给 中的方法enum,否则您将无法引用它。