下面是我正在试验的代码:
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 中遇到以下编译器错误:
The field
SECTION_A
cannot be declared static in a non-static inner type, unless initialized with a constant expression
现在我有点困惑。 SECTION_A
使用枚举 SectionsEnum.SECTION_A
初始化 - 为什么枚举不是常量表达式?我检查了 JLS,枚举确实没有在 Constant Expressions 中收听.
我想知道,为什么会这样。
最佳答案
如果你想明白的话:那是因为 Java
动态加载类,而 enum
也是类。所以它应该在运行时解决以进行初始化。
如果你想要形式原因:常量表达式定义在JLS 15.28
关于java - 为什么枚举不是常量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49488310/