作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
据我了解,内部枚举在 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 中是否是一种糟糕的编程风格,因为它实际上是被禁止的?
有什么方法可以创建内部枚举来访问我的实例变量吗?
提前致谢。
最佳答案
Is there any way to create inner enum with an access to my instance variables?
enum
是一种编译时构造(预定义),因此其中的任何外部数据都必须在运行前随时可供编译器使用。
除非您显式地将变量(或包含它的一些引用,在您的情况下为 this
)向下传递给 enum
中的方法,否则您将无法引用它。
关于java - 非静态上下文中的内部枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918020/
我是一名优秀的程序员,十分优秀!