以下是我正在尝试的代码:
实验的目标是获得类似于
我在Eclipse中遇到了以下编译器错误:
“非静态内部类型中不能声明字段
现在我有些困惑。
我想知道这是为什么。
public enum PagesEnum {
PAGE1 {
public static final SectionsEnum SECTION_A = SectionsEnum.SECTION_A;
public static final SectionsEnum SECTION_B = SectionsEnum.SECTION_B;
},
PAGE2 {
public static final SectionsEnum SECTION_C = SectionsEnum.SECTION_C;
public static final SectionsEnum SECTION_D = SectionsEnum.SECTION_D;
}
}
public enum SectionsEnum {
SECTION_A,
SECTION_B,
SECTION_C,
SECTION_D
}
实验的目标是获得类似于
PAGE1.SECTION_A
的语法,但这不是本问题的重点。我在Eclipse中遇到了以下编译器错误:
“非静态内部类型中不能声明字段
SECTION_A
为静态,除非使用常量表达式进行初始化。”现在我有些困惑。
SECTION_A
用枚举SectionsEnum.SECTION_A
进行了初始化 - 为什么枚举不是常量表达式?我已经检查了JLS,确实没有列出枚举作为常量表达式。我想知道这是为什么。
PagesEnum
子类型由PAGE1{}
静态创建吗?也许这就是让你困扰的部分:“……在非静态内部类型中……”。 - Malte HartwigPAGE1{}
可以被视为“非静态内部类型”,这一点我没有问题。但是我不明白为什么枚举值不是“常量表达式”。在我看来,Java中很少有比枚举值更加常量的东西了。 - lexicoreSECTION_X
将是PagesEnum
匿名子类的常量。因此,由于缺少类名来前缀它们,您永远无法访问它们。如果我删除静态修饰符,Eclipse会给我这个警告:“未使用字段new MyClass.PagesEnum(){}.SECTION_A的值”。那就是定义常量的类...由于它是匿名的,所以无法访问。 - Malte Hartwig