javadocでメソッドを参照する方法は?


864

@linkタグを使用してメソッドにリンクするにはどうすればよいですか?

変わりたい:

/**
 * Returns the Baz object owned by the Bar object owned by Foo owned by this.
 * A convenience method, equivalent to getFoo().getBar().getBaz()
 * @return baz
 */
public Baz fooBarBaz()

に:

/**
 * Returns the Baz object owned by the Bar object owned by Foo owned by this.
 * A convenience method, equivalent to {@link getFoo()}.{@link getBar()}.{@link getBaz()}
 * @return baz
 */
public Baz fooBarBaz()

しかし、@linkタグを正しくフォーマットする方法がわかりません。


22
私はこれが数年前であることを知っていますが...公式のJavaクラスを見ると、必要なJavadocフォーマットの形式を見つけるのに役立ちます。たとえば、HashMap Javadocを見てください。
Christophe Roussy、2014年

回答:


1122

JavaDocに関する多くの情報は、Standard DocletのDocumentation Comment Specificationにあります。

{@link package.class#member label}

タグ(あなたが探しているもの)。ドキュメントからの対応する例は次のとおりです

たとえば、次のコメントはgetComponentAt(int、int)メソッドを参照しています。

Use the {@link #getComponentAt(int, int) getComponentAt} method.

package.class呼ばれる方法は、現在のクラスであれば部分がommitedすることができます。


JavaDocに関するその他の役立つリンクは次のとおりです。


743

javadocドキュメントの@linkセクションの一般的な形式は次のとおりです。

{@link package.class#member label}

同じクラスのメソッド:

/** See also {@link #myMethod(String)}. */
void foo() { ... }

同じパッケージまたはインポートされた別のクラスのメソッド

/** See also {@link MyOtherClass#myMethod(String)}. */
void foo() { ... }

別のパッケージのメソッドで、インポートされていないもの:

/** 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が進化している間、これは脆弱になる可能性があります。

タイプ消去と#member

メソッドシグネチャにパラメータ化された型が含まれている場合は、javadoc @linkでそれらの型の消去を使用します。例えば:

int bar( Collection<Integer> receiver ) { ... }

/** See also {@link #bar(Collection)}. */
void foo() { ... }

待機:リンクのあるメソッド名だけが必要です。クラス名も必要ありません。
Jason S、

うん、いいよ。上記のリンクの最初の例は、それを示しています。
アンディトーマス

1
Oracle JavaDocハウツーページからリンクされていないJava 6リンクを提供するための+1。私はまだoracleリンクをうまく処理できません...(私の答えのJava 6への固定リンク)。
FrVaBe


@PaŭloEbermannありがとう!将来的には、「docs」ページをエントリーポイントとして使用しようとするでしょう。
FrVaBe

16

あなた@seeはそれを行うために使用できます:

サンプル:

interface View {
        /**
         * @return true: have read contact and call log permissions, else otherwise
         * @see #requestReadContactAndCallLogPermissions()
         */
        boolean haveReadContactAndCallLogPermissions();

        /**
         * if not have permissions, request to user for allow
         * @see #haveReadContactAndCallLogPermissions()
         */
        void requestReadContactAndCallLogPermissions();
    }

4
OP:「@linkタグを使用してメソッドにリンクするにはどうすればよいですか?」@link OPの要求に応じて、タグは、段落内のインラインで使用することができます。@seeタグができません。この質問で詳細をご覧ください。
アンディトーマス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.