【问题标题】:Overriding Javadoc comment on java.lang.Enum.values()覆盖 java.lang.Enum.values() 上的 Javadoc 注释
【发布时间】:2012-11-12 13:41:03
【问题描述】:

我对@9​​87654321@.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 说“它是由编译器生成的”。但是有人可以更精确吗?似乎是从枚举的名称生成的,但没有解释原因。

【问题讨论】:

  • 如果您阅读了有关另一个问题的内容,最好链接到该问题。也许这个问题也需要澄清,或者发现您的问题的其他人也可能对另一个问题感兴趣。
  • @JoachimSauer 感谢您的报告,我更新了相关问题,说它是由编译器生成的。另一篇文章只是说你不能覆盖 valueOf()/values():stackoverflow.com/questions/9662170/…
  • 还是不明白你的问题。为什么要覆盖 values() ?
  • 我想覆盖 values() javadoc。我想为了覆盖javadoc,我需要覆盖方法,或者至少是它的声明。但也许我错了,请更新问题或告诉我在这种情况下如何更新。
  • @Vince:我个人认为最好的选择(短期和中期)是对生成的 Javadoc 进行后处理,以在代码示例中包含您想要的内容。

标签: java enums overriding javadoc


【解决方案1】:

values 是一个静态方法,不会被覆盖。您无法提供自己的方法来替换生成的方法,这是由specification 提供的。

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

【讨论】:

  • 问题标题具有误导性(现已修复)。问题是实际上是关于改变方法的Javadoc,而不是它的代码。
  • @JoachimSauer 这是同样的事情,因为如果不声明方法,您将无法提供 Javadoc。
【解决方案2】:

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

【讨论】:

  • 是的,也许可以提交一个问题来告诉他们在他们的示例中包含更多标准代码,这可能会更好。
  • 是的,但我可以想象它的优先级会很低,这就是为什么我还建议提供修复,如果你想尽快修复的话。
  • 这不可能是 OpenJDK 修复,因为它是 per specification,使其 99.9% 确定。
  • @MarkoTopolnik 是的,这似乎是规范更改。 :-/ 虽然这将是一个向后兼容的。所以这个问题必须针对 JLS 而不是 JDK 然后(或两者)提出,并且 JLS 也必须更新(修补)。
【解决方案3】:

来自Oracle Java Tutorials

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2015-11-02
    • 2011-12-25
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多