**要正确地记录 API,必须在每个导出的类、接口、构造方法、方法和属性声明之前加上文档注释**。如果一个类是可序列化的,还应该记录它的序列化形式 (详见第 87 条)。在没有文档注释的情况下,Javadoc 可以做的最好的事情是将声明重现为受影响的 API 元素的唯一文档。使用缺少文档注释的 API 是令人沮丧和容易出错的。公共类不应该使用默认构造方法,因为无法为它们提供文档注释。要编写可维护的代码,还应该为大多数未导出的类、接口、构造方法、方法和属性编写文档注释,尽管这些注释不需要像导出 API 元素那样完整。
还要注意在`@throw`子句中的代码片段周围使用 Javadoc 的 `{@code}`标签。这个标签有两个目的:它使代码片段以代码字体形式呈现,并且它抑制了代码片段中 HTML 标记和嵌套 Javadoc 标记的处理。后一个属性允许我们在代码片段中使用小于号(<),即使它是一个 HTML 元字符。要在文档注释中包含多行代码示例,请使用包装在 HTML `<pre>`标记中的 Javadoc`{@code}`标签。换句话说,在代码示例前面加上字符`<pre>{@code,然后在代码后面加上}</pre>`。这保留了代码中的换行符,并消除了转义 HTML 元字符的需要,但不需要转义 at 符号(@),如果代码示例使用注释,则必须转义 at 符号(@)。
不要忘记,你必须采取特殊操作来生成包含 HTML 元字符的文档,例如小于号(<),大于号(>)和 and 符号(&)。 将这些字符放入文档的最佳方法是使用`{@literal}`标签将它们包围起来,该标签禁止处理 HTML 标记和嵌套的 Javadoc 标记。 它就像`{@code}`标签一样,除了不会以代码字体呈现文本以外。 例如,这个 Javadoc 片段:
```java
* A geometric series converges if {@literal |r| <1}.
它会生成文档:「A geometric series converges if |r| <1.」。`{@literal}`标签可能只放在小于号的位置,而不是整个不等式,并且生成的文档是一样的,但是文档注释在源代码中的可读性较差。这说明了**文档注释在源代码和生成的文档中都应该是可读的通用原则**。如果无法实现这两者,则生成的文档的可读性要胜过在源代码中的可读性。
请小心,如果预期的概要描述包含句点,因为句点可能会提前终止描述。例如,以「A college degree, such as B.S., M.S. or Ph.D.」 会导致概要描述为「A college degree, such as B.S., M.S」。问题在于概要描述在第一个句点结束,然后是空格、制表符或行结束符(或第一个块标签处)[Javadoc-ref]。这里是缩写「M.S.」 中的第二个句号后面跟着一个空格。最好的解决方案是用`{@literal}`标签来包围不愉快的句点和任何相关的文本,这样源代码中的句点后面就不会有空格了:
在 Java 9 中,客户端索引被添加到 Javadoc 生成的 HTML 中。这个索引以页面右上角的搜索框的形式出现,它简化了导航大型 API 文档集的任务。当你在框中键入时,得到一个匹配页面的下拉菜单。API 元素 (如类、方法和属性) 是自动索引的。有时,可能希望索引对你的 API 很重要的其他术语。为此添加了`{@index}`标签。对文档注释中出现的术语进行索引,就像将其包装在这个标签中一样简单,如下面的片段所示:
```java
* This method complies with the {@index IEEE 754} standard.
```
泛型,枚举和注释需要特别注意文档注释。 **记录泛型类型或方法时,请务必记录所有类型参数**:
```java
/**
* An object that maps keys to values. A map cannot contain
* duplicate keys; each key can map to at most one value.
*
* (Remainder omitted)
*
*@param<K> the type of keys maintained by this map
Javadoc 会自动检查是否符合此条目中的许多建议。在 Java 7 中,需要命令行开关`-Xdoclint`来获得这种行为。在 Java 8 和 Java 9 中,默认情况下启用了此检查。诸如 checkstyle 之类的 IDE 插件会进一步检查是否符合这些建议[Burn01]。还可以通过 HTML 有效性检查器运行 Javadoc 生成的 HTML 文件来降低文档注释中出现错误的可能性。可以检测 HTML 标记的许多错误用法。有几个这样的检查器可供下载,可以使用 W3C markup validation service 在线验证 HTML 格式。在验证生成的 HTML 时,请记住,从 Java 9 开始,Javadoc 就能够生成 HTML5 和 HTML 4.01,尽管默认情况下仍然生成 HTML 4.01。如果希望 Javadoc 生成 HTML5,请使用`-html5`命令行开关。
如果你遵循本项目中的指导原则,生成的文档应该提供对 API 的清晰描述。然而,唯一确定的方法,**是阅读 Javadoc 实用工具生成的 web 页面**。对于其他人将使用的每个 API,都值得这样做。正如测试程序几乎不可避免地会导致对代码的一些更改一样,阅读文档通常也会导致对文档注释的一些少许的修改。
总之,文档注释是记录 API 的最佳、最有效的方法。对于所有导出的 API 元素,它们的使用应被视为必需的。 采用符合标准惯例的一致风格 。请记住,在文档注释中允许任意 HTML,但必须转义 HTML 的元字符。