下面这个Java枚举类的主体是如何工作的?

3
public enum ID {
 Player(),
 Enemy();
}

我已经阅读了Java枚举的完整Oracle文档,我知道它的工作原理和基础知识,但是我对上述枚举类的主体一无所知。 Are Player()和Enemy()常量还是函数? 此外,这将返回ID.Player()。

这些只是枚举常量。你正在调用一个没有参数的构造函数。 - Andy Turner
4
这段语句翻译过来是:"这会返回什么 ID.Player();?" 的错误。 - Federico klez Culloca
我的猜测是反编译器的输出,不是吗? - Vasily Liaskovsky
这个enum声明令人困惑,原因有两个。首先,该声明不遵循Java命名约定,因为枚举常量应该使用UPPER_SNAKE_CASE编写(而ID类应该是Id)。其次,如果一个枚举有一个默认构造函数,在大多数情况下括号会被省略。 - MC Emperor
1个回答

8
与常规类一样,如果您没有声明显式构造函数,则枚举类型会自动获得默认的无参构造函数。
语言规范says
在没有构造函数声明的枚举声明中,将隐式声明默认构造函数。 默认构造函数是私有的,没有形式参数,并且没有抛出子句。
稍早之前,它也说:
枚举常量可以后跟参数,这些参数传递给枚举的构造函数...如果省略了参数,则假定为空参数列表。
因此,这些只是枚举常量,显式调用了隐式构造函数。 这与省略()完全相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接