【问题标题】:How does the body of the below java enum class work?下面的 java 枚举类的主体是如何工作的?
【发布时间】:2020-09-18 06:45:41
【问题描述】:
public enum ID {
 Player(),
 Enemy();
}

我已经阅读了 Java 枚举的整个 oracle 文档,我知道它是如何工作的以及所有基础知识,但我对上述枚举类的主体一无所知 Player () , Enemy () 是常量吗?职能 ? 还有这会返回什么 ID.Player();

【问题讨论】:

  • 这些只是枚举常量。您正在调用没有参数的构造函数。
  • “这会返回什么ID.Player();?”一个错误。
  • 我猜是反编译器的输出,不是吗?
  • 这个enum 声明令人困惑,原因有二。首先,声明不遵循 Java 命名约定,因为枚举常量应该写在 UPPER_SNAKE_CASE 中(并且ID 类应该是Id)。其次,如果一个枚举有一个默认构造函数,在大多数情况下括号会被省略。

标签: java class enums constants


【解决方案1】:

与常规类一样,如果您不声明显式构造函数,您将获得一个带有枚举的默认无参数构造函数。

语言规范says:

在没有构造函数声明的枚举声明中,默认构造函数被隐式声明。默认构造函数是私有的,没有形参,也没有 throws 子句。

在这之前,它还说:

枚举常量后面可以跟参数,这些参数被传递给枚举的构造函数...如果省略参数,则假定参数列表为空。

因此,这些只是枚举常量,显式调用隐式构造函数。这与省略() 完全相同。

【讨论】:

    猜你喜欢
    • 2022-07-21
    • 1970-01-01
    • 2015-05-03
    • 2023-03-22
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    相关资源
    最近更新 更多