据我所知,内部枚举总是在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中它是一种糟糕的编程风格,因为它实际上是被禁止的吗?
有没有办法通过访问我的实例变量来创建内部枚举?
提前致谢。
答案 0 :(得分:2)
有没有办法通过访问我的实例来创建内部枚举 变量
enum
是一个编译时构造(预定义),因此一个内部的任何外部数据必须在运行之前随时可供编译器使用。
除非您明确将变量(或包含它的某些引用,在您的情况下为this
)向下传递给enum
内的方法,否则您将无法引用它。
答案 1 :(得分:1)
我发现在每个枚举常量中重写方法非常方便,所以我可以在我的外部类中使用它。在java中它是一种糟糕的编程风格,因为它实际上是被禁止的吗?
枚举常量中的重写方法没有任何内在错误。与任何其他语言结构一样,如果使用得当,这也不错。
我不确定你的意思是“所以我可以在外层使用它”,但一般来说,枚举不应该严重依赖于外部代码。它们旨在描述一组固定的常量值,并且需要很少或不需要与其他类型的耦合来实现它(除了核心类型,如基元和字符串,无论如何)。对于访问外部类型的实例级成员的枚举常量,我觉得有点可疑。