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

时间:2013-06-27 08:26:13

标签: java syntax enums

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

enum MyEnum
{
    int i = 90;
}

显示以下编译错误。

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

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

enum MyEnum
{
    ;//put a semicolon
    int i = 90;
}

为什么java enum是以这种方式设计的?

2 个答案:

答案 0 :(得分:10)

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

请参阅8.9.1Java Language Specification

  

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

答案 1 :(得分:2)

枚举的两个必要部分是:

  1. 枚举标识符;
  2. enum body。
  3. 您必须先在枚举主体之前声明枚举标识符列表。 这里,;显示第一部分,因为第一部分是强制性的。如果忽略它,将产生编译错误。如果您添加;,那么当您同时符合时,它会进行编译。