8

我对方法java.lang.Enum .values()有一个非常具体的问题。

我想覆盖它的javadoc。非常准确地说,在我创建了自己的枚举之后,当前的 javadoc 是:

public static MyClass.MyEnum[] values()

  ... 
  This method may be used to iterate over the constants as follows:

    for (MyClass.MyEnum c : MyClass.MyEnum.values())
    System.out.println(c);

  Returns:
    ...

但在我的公司,System.out电话被认为是不好的做法,所以我不希望它显示出来。我的第一次尝试是覆盖values(),但这显然是不可能的。还有其他方法可以做到这一点吗?还是唯一可能更新生成的文档?

我也很好奇为什么values()不可覆盖。我在其他问题上读到“它是由编译器生成的”。但是有人可以更精确吗?它似乎是从枚举的名称生成的,但它没有解释原因。

4

3 回答 3

12

values是一种静态方法,不会被覆盖。您不能提供自己的方法来替换生成的方法,这是通过规范

没有标准机制来替换您无法控制其源代码的方法的 Javadoc,但是您可能会弄乱构建工具,或者如果所有其他方法都失败,则使用最终的 Javadoc HTML。

于 2012-11-12T14:00:28.353 回答
1

我认为这是不可能的,但如果您愿意,您可以提交 JDK 问题并提供 OpenJDK 修复。

于 2012-11-12T13:51:25.397 回答
1

来自Oracle Java 教程

枚举声明定义了一个类(称为枚举类型)。枚举类主体可以包括方法和其他字段。编译器在创建枚举时会自动添加一些特殊方法。例如,它们有一个静态值方法,该方法返回一个数组,该数组按照声明的顺序包含枚举的所有值。

因此,方法值不能被覆盖,因为它是编译器创建的特殊方法。当您尝试这样做时,Eclipse IDE 会生成此错误:

枚举(你的枚举)已经隐式定义了方法 values()

于 2012-11-12T14:03:36.087 回答