【发布时间】:2013-06-27 08:26:12
【问题描述】:
如果我在以这种方式声明枚举常量之前或不声明变量:
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被设计成一个由多个元素组成的枚举。这个设计完全有效。 -
因为必须有至少一个枚举常量。因为这是 Java 语言规范中定义语法的方式。因为。
-
@EJP 但在后来的情况下,我没有声明任何枚举常量,而是在声明变量之前简单地附加了一个分号。
Enum至少应该有一个枚举常量,这不违反规定吗? -
这意味着没有枚举常量。编译器需要一种方法来知道枚举常量在哪里停止而其他东西从哪里开始。这就是语言设计者选择的方式。
-
@EJP 谢谢。这就是我想知道的......这是纯粹的语言设计师的选择......