为什么必须在枚举类型中的任何其他变量和方法声明之前声明枚举常量?

Vis*_*l K 9 java syntax enums

如果我在以这种方式声明枚举常量之前或之前声明变量:

enum MyEnum
{
    int i = 90;
}
Run Code Online (Sandbox Code Playgroud)

它显示以下编译错误.

MyEnum.java:3: <identifier> expected
{
 ^
MyEnum.java:4: ',', '}', or ';' expected
        int i = 90;
        ^
MyEnum.java:4: '}' expected
        int i = 90;
             ^
MyEnum.java:5: class, interface, or enum expected
}
^
4 errors
Run Code Online (Sandbox Code Playgroud)

但是如果我在声明之前宣布一个枚举常量,i那么它编译得很好.
即使以下代码将编译正常:

enum MyEnum
{
    ;//put a semicolon
    int i = 90;
}
Run Code Online (Sandbox Code Playgroud)

为什么java enum是这样设计的?

Jef*_*ter 10

;指示枚举标识符列表的末尾.显然你可以有一个空的枚举列表,但你必须有一个.

8.9.1在的Java语言规范:

8.9.1枚举常量
枚举类型的主体可能包含枚举常量

  • 特别是:`EnumBodyDeclarations :; ClassBodyDeclarationsopt` (4认同)