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

问题描述 投票:9回答:2

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

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 syntax enums
2个回答
10
投票

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

参见8.9.1Java Language Specification

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


2
投票

枚举的两个必要部分是:

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

您必须首先在枚举主体之前声明枚举标识符列表。在这里,;展示了第一部分,因为第一部分是强制性的。如果忽略它,将产生编译错误。如果你添加;然后它将编译,因为你满足这两个标准。

© www.soinside.com 2019 - 2024. All rights reserved.