2. @see 注解

@see 注解的格式非常简单:

@see reference

例如,我们可以用它标记指向官方 Java 文档的外部链接:

/**
 * @see <a href="https://docs.oracle.com/en/java/">Java 文档</a>
 */

简单来说,当我们需要添加指向参考资料的链接或文本条目时,就使用 @see 注解。这个注解会添加一个“另请参阅”标题。一个文档注释可以包含任意数量的 @see 注解,它们都会被归到同一个标题下。Oracle 官方文档提供了详细的使用说明。这个注解在所有文档注释中都有效,包括包、概览、构造函数、类和接口。@see 注解有三种变体,下面分别介绍。

2.1. @see "text-string"

这种形式会添加一个文本字符串条目,但不会生成任何类型的链接。字符串可以指向书籍页面或任何需要提供额外上下文的信息。Javadoc 工具通过检测第一个字符是否为双引号(")来区分文本字符串。看个例子:

/**
 * @see "此方法执行某些功能。"
 */
public void someMethod() {
  // 执行某些操作...
}

渲染效果如下:

示例截图

2.2. @see <a href="URL">label</a>

这种形式会添加一个定义 URL 的链接。URL 可以是相对或绝对路径。Javadoc 工具通过检测第一个字符是否为小于号(<)来区分这种情况。看个在锚标签中显示链接的例子:

/**
 * @see <a href="http://www.baeldung.com">Baeldung</a>
 */
public void someMethodV2() {
  // 执行某些操作...
}

生成的文本如下:

示例截图

2.3. @see package.class#member label

这种形式会添加一个指向函数的链接。标签是可选的,未定义时使用类中的原始成员名称。-noqualifier 选项会移除可见文本中的包名。**package.class#member 指的是包、类、接口或字段名等元素名称**。看个例子:

/**
 * @see String#toLowerCase() convertToLowerCase
 */
public void addingSeeToAMethod() {
  // 执行某些操作...
}

生成的标准 HTML 如下:

<dl> 
<dt><b>另请参阅:</b> 
<dd><a href="../../java/lang/String#toLowerCase()"><code>convertToLowerCase<code></a> 
</dl>

浏览器中的渲染效果:

示例截图

注意:标签内可以使用多个空格。

这是一个行内注解。@link 注解的格式非常直接:

{@link  package.class#member  label}

看个使用 @link 注解的例子:

/**
 * 使用 {@link String#equalsIgnoreCase(String) equalsMethod} 检查两个字符串是否相等。
 */

这种形式会插入一个带有可见文本标签的行内链接。文本标签指向指定包、类或成员名的文档。这个注解可以在任何地方使用,包括概览、包、类、方法、字段等。也可以用在 @return@param@deprecated 等注解的文本部分。这个注解与 @see 非常相似,因为两者都需要相同的引用,并且接受相同的 package.class#member 和标签语法。

上述注解生成的标准 HTML 如下:

使用 <code>equalsMethod</code> 检查两个字符串是否相等。

浏览器中的渲染效果:

示例截图

本节我们看看 @see@link 注解的相似点。

@see@link 注解都可以在类、包或方法中多次使用@see 注解声明指向外部链接、类或方法的引用。@link 注解也可以多次使用,用于声明行内链接或与其他块注解结合使用。看个展示两者语法的例子:

/**
 * 使用 {@link String#toLowerCase()} 转换为小写字母。
 * @deprecated 自 Java 1.8 起 {@link java.security.Certificate} 已废弃。
 * @return {@link String} 对象
 * @see <a href="http://www.baeldung.com">Baeldung</a>
 * @see String#hashCode() hashCode
 */
public String someMethod() {
  // 执行某些功能
  return "";
}

本节我们看看 @see@link 注解的区别。

5.1. 属于不同的注解类型

文档注释可分为两类:

  • 块注解
  • 行内注解

块注解以 @tag 形式出现在行首,忽略前导星号、空格和分隔符(*/)。@see 就是块注解的典型例子。

行内注解出现在花括号内,形式为 {@tag}。它可以在任何允许文本的地方使用和解释,可以存在于描述或注释的任何位置:

/**
 * 一些描述。
 *
 * @see java.lang.Object
 * @return  这将返回 {@link #toString() 字符串} 响应。
 */

@see@link 的主要区别在于:一个生成行内链接,另一个在“另请参阅”部分显示链接。此外,@link 注解以花括号开始和结束,将其与行内文本的其余部分分开。由于 @see 是块注解,我们需要显式创建它。

看个展示 @see@link 输出效果的例子:

/**
 *
 * 使用 {@link String#toLowerCase()} 转换为小写字母。
 * @deprecated 自 Java 1.8 起 {@link java.security.Certificate} 已废弃。
 * @return {@link String} 对象
 * @see <a href="http://www.baeldung.com">Baeldung</a>
 * @see String#hashCode() hashCode
 */
public String someMethod() {
  // 执行某些功能
  return "";
}

生成的 Javadoc 输出如下:

示例截图

5.3. 使用方式差异

块注解独立使用,不能与其他注解结合。而行内注解用在文档注释中或作为行内链接。**@link 注解可以与其他块注解结合使用**。看个将 @link 与其他块注解结合使用的例子:

/**
 * 一些描述。
 *
 * @see java.lang.Object
 * 这是一个 {@link #getClass() } 方法。
 * @see #getClass() 使用 {@link #toString()} 进行字符串转换。
 * @deprecated 自 JDK 1.1 起,被 {@link #someMethod()} 取代。
 */

6. @inheritDoc 注解

@see 不同,@inheritDoc 是一个行内注解:

{@inheritDoc}

这个注解采用了面向对象编程中的继承概念。它继承父类或接口中相似元素的文档。这意味着我们不需要重复通用文档。

该注解在方法的主描述块以及方法注解的 @return@throws@param 文本参数中有效。

6.1. 使用方法

@inheritDoc 只能从本地可用的父类或接口继承。我们创建一个类似 Runnable 的接口来试试:

public interface MyRunnable {
    /**
     * 运行此操作。
     */
    void run();
}

接口对 run() 方法有简单描述。

创建一个实现该接口的类 TimeOutputterRunnable

public class TimeOutputterRunnable implements MyRunnable{
    /**
     * {@inheritDoc}
     * 运行时输出当前时间的纪元毫秒数。
     */
    public void run(){
        System.out.println(System.currentTimeMillis());
    }
}

该类实现了接口的唯一方法。它使用 @inheritDoc 注入接口的文档。我们还添加了一些特定于实现的额外文本。在生成的 Javadoc 中可以看到父接口文档和此类文本:

实现示例

7. 总结

本教程我们探讨了 @see@link@inheritDoc 注解的使用,描述了注释注解的类型以及 @see 的不同使用方式。

我们还看到了 @see@link 之间的一些主要区别。简单来说:

  • @see 用于显示指向参考资料的链接或文本
  • @link 在文本或其他注解中描述行内链接

最后,我们使用 @inheritDoc 从接口导入 Javadoc。这个功能使其区别于 @see@link@see@link 的作用是在 Javadoc 中添加交叉引用,而 @inheritDoc 用于从父类或接口导入 Javadoc。


原始标题:Javadoc: @see, @link, and @inheritDoc | Baeldung