【问题标题】:java enum confusionjava枚举混淆
【发布时间】:2011-12-07 20:08:01
【问题描述】:

我遇到了以下 java 代码。这里接口包含两个方法,其中只有一个方法在枚举中实现。写的是name()是自动实现的。我的问题是怎么可能?我之前没有阅读过任何关于枚举中自动方法实现的规则。那么这里发生了什么?此外,代码没有给出任何类型的编译时错误。

interface Named {
    public String name();
    public int order();
}

enum Planets implements Named {
    Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune;
    // name() is implemented automagically.
    public int order() { return ordinal()+1; }
}

【问题讨论】:

    标签: java interface enums


    【解决方案1】:

    name() 在 Enum 类中定义,它满足您的接口协定,因此您不必定义 name(),除非您当然想覆盖默认行为。

    【讨论】:

      【解决方案2】:

      enum 有一个默认方法name(),仅此而已。

      它和others like values(), valueOf(), and ordinal(), come from the Enum class

      【讨论】:

        【解决方案3】:

        Java 中的所有枚举都隐式扩展了Enum,它实现了name() 方法。

        公共最终字符串名称()

        返回此枚举常量的名称,与其枚举声明中的声明完全相同。

        【讨论】:

          【解决方案4】:

          在 Java 中,有为类型预定义的属性和方法。对于枚举,方法name() 和对于数组,属性length 是示例。在您的示例中,方法 name() 将返回“Mercury”、“Venus”、“Earth”等。

          【讨论】:

            【解决方案5】:

            每个enum 都派生自抽象类Enum<E....>。该类实现了name() 和提到的ordinal() 等等。看看吧。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-06-08
              • 2021-04-16
              • 2014-06-12
              相关资源
              最近更新 更多