从@link javadoc文档的链接部分可以得知,一般格式为:
![{@link 包名.类名#成员名 标签}](https://istack.dev59.com/HGVDj.webp)
例子
同一类中的方法:
/** See also {@link #myMethod(String)}. */
void foo() { ... }
不同类中的方法,可以是在相同的包中或者被导入:
/** See also {@link MyOtherClass#myMethod(String)}. */
void foo() { ... }
不在同一 package 中的方法,且没有被导入:
/** See also {@link com.mypackage.YetAnotherClass#myMethod(String)}. */
void foo() { ... }
使用普通文本而不是代码字体来标识与方法相关的标签:
/** See also this {@linkplain #myMethod(String) implementation}. */
void foo() { ... }
像您的问题中提到的那样,这是一系列方法调用。我们需要为链接到这个类外的方法指定标签,否则会得到getFoo().Foo.getBar().Bar.getBaz()
。但是这些标签在重构时可能会变得脆弱--请参见下面的“标签”。
/**
* A convenience method, equivalent to
* {@link #getFoo()}.{@link Foo#getBar() getBar()}.{@link Bar#getBaz() getBaz()}.
* @return baz
*/
public Baz fooBarBaz()
标签
自动重构可能不会影响标签。这包括重命名方法、类或包以及更改方法签名。
因此,只有在您需要与默认文本不同的文本时才提供标签。
例如,您可能希望将人类语言链接到代码:
/** You can also {@linkplain #getFoo() get the current foo}. */
void setFoo( Foo foo ) { ... }
或者你可以像上面“一系列方法调用”的例子中所示那样,通过链接到一个带有不同于默认文本的代码示例来进行链接。但是,在API发生变化时这种方式可能会很脆弱。
类型擦除和#成员
如果方法签名包括参数化类型,请在javadoc @link中使用这些类型的擦除形式。例如:
int bar( Collection<Integer> receiver ) { ... }
/** See also {@link #bar(Collection)}. */
void foo() { ... }