覆盖java.lang.Enum.values()上的Javadoc注释

时间:2012-11-12 13:41:03

标签: java enums override javadoc

我对方法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()不能覆盖。我读到on other questions“它是由编译器生成的”。但有人可以更精确吗?它似乎是从enum的名字生成的,但它没有解释原因。

3 个答案:

答案 0 :(得分:12)

values是一种静态方法,不受覆盖。您无法提供自己的方法来替换生成的方法,而是specification

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

来自Oracle Java Tutorials

  

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

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

  

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