Javadoc:"Methods inherited from" 和 "Methods declared in" 之间的区别

Javadoc: Difference between "Methods inherited from" and "Methods declared in"

JDK Java Java < 10 的文档有一个名为 "Methods inherited from" 的部分,其中列出了在父 class / 接口中声明的方法.但是从 Java 10 开始,此部分称为 "Methods declared in".

比较:

它们之间有区别还是这只是部分名称的变化?

在 Java 10 中,选项 --override-methods (detail|summary) 被添加到 javadoc 命令中:

目的是在实现或覆盖方法时减少噪音,但文档保持不变。

模式

detail 模式(默认)

当您使用 javadoc 而不指定 override-methods 时,detail 模式是默认模式。

它的行为与之前生成文档的方式相同:

  • 如果一个方法没有被覆盖,它将在 "Methods inherited from" 部分。
  • 如果一个方法被覆盖,它将被记录在 "Method Detail" 下,无论其签名或文档是否也被更改。

summary模式

  • 如果一个方法被覆盖并且它的文档被更改,它将被记录在"Method Detail".
  • 否则会列在"Methods declared in"下。

summary 模式现在用于生成 JDK 文档 (JDK-8189706)。

请注意,此模式当前存在错误,因为它忽略了对应该记录在案的方法签名的一些更改,请参阅 JDK-8223607

结论

您将看到 "Methods inherited from" 或 "Methods declared in" 部分。
当比较两个文档(一个 "inherited from",另一个 "declared in")相同的 class 时,"inherited from" 的文档可能会在 "Method Detail" 下列出更多方法,而对于 "declared in" 部分,一些方法改为在 "declared in" 部分。

所以是的,它们之间是有区别的。

例子

可以看到行为上的差异,例如 java.time.temporal.ChronoUnit class:

  • Java 8:在"Method Detail"
  • 下列出
  • Java 12: Contained in "Methods declared in class java.lang.Enum"; see also the source 验证方法是否真的被覆盖