9

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

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枚举是这样设计的?

4

2 回答 2

10

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

请参阅Java 语言规范8.9.1

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

于 2013-06-27T08:28:18.053 回答
2

枚举的两个强制性部分是:

  1. 枚举标识符;
  2. 枚举体。

您必须在enum body之前先声明enum identifiers list 。这里显示第一部分,因为第一部分是强制性的。如果你忽略它,它会产生一个编译错误。如果您添加,那么它将在您满足这两个条件时进行编译。;;

于 2013-06-27T08:31:00.490 回答