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>
浏览器中的渲染效果:
注意:标签内可以使用多个空格。
3. @link 注解
这是一个行内注解。@link
注解的格式非常直接:
{@link package.class#member label}
看个使用 @link
注解的例子:
/**
* 使用 {@link String#equalsIgnoreCase(String) equalsMethod} 检查两个字符串是否相等。
*/
这种形式会插入一个带有可见文本标签的行内链接。文本标签指向指定包、类或成员名的文档。这个注解可以在任何地方使用,包括概览、包、类、方法、字段等。也可以用在 @return
、@param
和 @deprecated
等注解的文本部分。这个注解与 @see
非常相似,因为两者都需要相同的引用,并且接受相同的 package.class#member
和标签语法。
上述注解生成的标准 HTML 如下:
使用 <code>equalsMethod</code> 检查两个字符串是否相等。
浏览器中的渲染效果:
4. @see 和 @link 的相似之处
本节我们看看 @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 "";
}
5. @see 和 @link 的区别
本节我们看看 @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。