如果我在以这种方式声明枚举常量之前或之前声明变量:
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是这样设计的?
;
表示枚举标识符列表的结尾。显然你可以有一个空的枚举列表,但你必须有一个。
参见8.9.1的Java Language Specification:
8.9.1枚举常量 枚举类型的主体可能包含枚举常量
枚举的两个必要部分是:
您必须首先在枚举主体之前声明枚举标识符列表。在这里,;
展示了第一部分,因为第一部分是强制性的。如果忽略它,将产生编译错误。如果你添加;
然后它将编译,因为你满足这两个标准。