我对方法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的名字生成的,但它没有解释原因。
答案 0 :(得分:12)
values
是一种静态方法,不受覆盖。您无法提供自己的方法来替换生成的方法,而是specification。
没有标准的机制来替换你无法控制源代码的方法的Javadoc,但你可能会使用构建工具,或者,如果所有其他方法都失败了,那么最终的Javadoc HTML。
答案 1 :(得分:1)
我认为这不可行,但如果您愿意,可以提交JDK问题并提供OpenJDK修复。
答案 2 :(得分:1)
枚举声明定义了一个类(称为枚举类型)。枚举类主体可以包括方法和其他字段。编译器在创建枚举时会自动添加一些特殊方法。例如,它们有一个静态值方法,它返回一个数组,该数组按照它们被声明的顺序包含枚举的所有值。
因此,方法值不能被覆盖,因为它是编译器创建的特殊方法。当您尝试执行此操作时,Eclipse IDE会生成此错误:
枚举(你的枚举)已经隐式定义了方法值()