枚举常量中局部变量的范围

时间:2014-03-14 14:16:45

标签: java enums

我在枚举常量块中创建一个局部变量,如:

enum NUMBER {
    ONE() {
        int one = 1;
    },
    TWO() {
        int two = ONE.one + 1; //!ERROR: one can't be resolved.
    }
}

我的问题是为什么我不能引用其他常量的类字段变量?

这是一个课堂领域吗?

我所知道的是,ONE和TWO是NUMBER的字段,因此ONE可以看到TWO并且访问TWO的字段,不是吗?

2 个答案:

答案 0 :(得分:2)

这不起作用,因为当您将其声明为

ONE () {
}

你宣布一个新的匿名内部类。

但是,您可以在NUMBER枚举中声明一个字段,将其添加到NUMBER构造函数中,然后在常量中声明它:

ONE(1), TWO(2)

因为枚举类似于常规类并且允许这样的声明。

答案 1 :(得分:1)

  

匿名内部类是一个完整的对象,因此可以定义   内部使用的字段和方法。这些领域和方法,   除非它们覆盖超类的方法,否则不可见   外部世界因为总是键入一个匿名的内部类   它的超类,没有那些方法或字段。但它   对匿名内部类的操作非常有用   有这些领域和方法,所以如果你需要它们,请使用它们。

Reference