为什么枚举不是一个常数表达式?

时间:2018-03-26 09:39:21

标签: 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中遇到以下编译器错误:

  

除非使用常量表达式初始化,否则无法在非静态内部类型中将字段SECTION_A声明为静态

现在我有点困惑。使用枚举SECTION_A初始化SectionsEnum.SECTION_A - 为什么不能枚举常量表达式?我已经检查了JLS,枚举确实没有收听Constant Expressions

我想知道,为什么会这样。

1 个答案:

答案 0 :(得分:2)

如果你想理解那么:因为Java动态加载类而enum也是类。所以它应该在运行时进行初始化。

如果您需要正式理由:JLS 15.28

中的常量表达式定义