我对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()
是不可覆盖的。我读到其他问题"它是由编译器生成的"。但是有人能更精确吗?它似乎是从枚举的名称生成的,但它没有解释原因。
values
是一个静态方法,不受重写。您不能提供自己的方法来替换生成的方法,这是按规范的。
没有标准的机制来替换一个你无法控制其源代码的方法的Javadoc,但你可能会弄乱构建工具,或者,如果一切都失败了,最终的Javadoc HTML。
是不可能的,但是如果您愿意,您可以提交JDK问题并可能提供OpenJDK修复程序。
来自 Oracle Java 教程:
枚举声明定义一个类(称为枚举类型)。枚举类主体可以包含方法和其他字段。编译器在创建枚举时会自动添加一些特殊方法。例如,它们有一个静态值方法,该方法返回一个数组,其中包含枚举的所有值,按声明顺序排列。
因此,方法值不能重写,因为它是由编译器创建的特殊方法。当您尝试这样做时,Eclipse IDE 会生成此错误:
枚举(你的枚举)已经隐式定义了方法值()