java - 为什么枚举不是常量表达式?

标签 java enums

下面是我正在试验的代码:

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/

相关文章:

java - Eclipse e4 : Accessing properties in PostContextCreate

java - 将excel文件复制到基于java中当前日期创建的文件夹中

java - 每次 git 推送都会删除未跟踪的文件

java - 是否可以仅通过重定向允许访问页面?

android - 我如何使用密封类来描述具有关联值的有限案例集,以及更小的此类值集?

java - 如何创建一个通用方法来返回枚举值数组而不是其常量?

java - 什么是抑制异常?

java - 下拉列表的变化取决于另一个下拉列表

java - 通过枚举类型初始化参数

typescript - 在 typescript 中将枚举类型作为参数传递