Bagaimana cara mereferensikan metode di javadoc?

864

Bagaimana saya bisa menggunakan @linktag untuk menautkan ke suatu metode?

Saya ingin berubah:

/**
 * 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()

untuk:

/**
 * 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()

tapi saya tidak tahu cara memformat @linktag dengan benar.

Jason S
sumber
22
Saya tahu ini beberapa tahun yang lalu tetapi ... melihat kelas Java resmi dapat membantu menemukan segala bentuk format Javadoc yang Anda butuhkan. Sebagai contoh, lihat HashMap Javadoc.
Christophe Roussy

Jawaban:

1122

Anda akan menemukan banyak informasi tentang JavaDoc di Spesifikasi Komentar Dokumentasi untuk Doclet Standar , termasuk informasi di

{@link package.class # label anggota}

tag (yang Anda cari). Contoh yang sesuai dari dokumentasi adalah sebagai berikut

Sebagai contoh, berikut adalah komentar yang merujuk pada metode getComponentAt (int, int):

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

Bagian package.classdapat dihentikan jika metode yang dimaksud adalah di kelas saat ini.


Tautan bermanfaat lainnya tentang JavaDoc adalah:

FrVaBe
sumber
743

Format umum, dari bagian @link dari dokumentasi javadoc , adalah:

{@link package.class # label anggota}

Contohnya

Metode di kelas yang sama:

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

Metode di kelas yang berbeda, baik dalam paket yang sama atau diimpor:

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

Metode dalam paket berbeda dan tidak diimpor:

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

Label yang ditautkan dengan metode, dalam teks biasa, bukan font kode:

/** See also this {@linkplain #myMethod(String) implementation}. */
void foo() { ... }

Rantai panggilan metode, seperti dalam pertanyaan Anda. Kita harus menentukan label untuk tautan ke metode di luar kelas ini, atau kita dapatkan getFoo().Foo.getBar().Bar.getBaz(). Tetapi label ini bisa rapuh; lihat "Label" di bawah ini.

/**
 * A convenience method, equivalent to 
 * {@link #getFoo()}.{@link Foo#getBar() getBar()}.{@link Bar#getBaz() getBaz()}.
 * @return baz
 */
public Baz fooBarBaz()

Label

Refactoring otomatis mungkin tidak mempengaruhi label. Ini termasuk mengganti nama metode, kelas atau paket; dan mengubah tanda tangan metode.

Karena itu, berikan label hanya jika Anda ingin teks yang berbeda dari yang standar.

Misalnya, Anda dapat menautkan dari bahasa manusia ke kode:

/** You can also {@linkplain #getFoo() get the current foo}. */
void setFoo( Foo foo ) { ... }

Atau Anda dapat menautkan dari sampel kode dengan teks yang berbeda dari standar, seperti yang ditunjukkan di atas di bawah "Rantai panggilan metode". Namun, ini bisa rapuh saat API sedang berkembang.

Ketik erasure dan #member

Jika tanda tangan metode menyertakan tipe parameter, gunakan penghapusan tipe tersebut di javadoc @link. Sebagai contoh:

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

/** See also {@link #bar(Collection)}. */
void foo() { ... }
Andy Thomas
sumber
Tunggu: Saya hanya ingin nama metode dengan tautan, saya juga tidak ingin nama kelasnya.
Jason S
Ah, baiklah. Contoh pertama pada tautan di atas menggambarkan hal itu.
Andy Thomas
1
+1 untuk menyediakan tautan Java 6 yang tidak saya tautkan dari halaman Oracle JavaDoc HowTo. Saya masih tidak bisa bergaul dengan tautan oracle ... (tautan tetap ke Java 6 dalam jawaban saya).
FrVaBe
@ K. Claszen: download.oracle.com/javase/6/docs , lalu klik javadoc pada diagram, lalu pilih Javadoc Tool Reference Page (Microsoft Windows) , lalu tag Javadoc .
Paŭlo Ebermann
@ Paŭlo Ebermann Terima kasih! Akan mencoba menggunakan halaman 'docs' sebagai titik masuk di masa depan.
FrVaBe
16

Anda dapat menggunakannya @seeuntuk melakukan itu:

Sampel:

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();
    }
vuhung3990
sumber
4
OP: "Bagaimana saya bisa menggunakan tag tautan untuk menghubungkan ke suatu metode?" The @link tag dapat inline digunakan dalam sebuah paragraf, seperti yang diminta oleh OP. The @see tag tidak bisa. Lihat lebih detail di pertanyaan ini .
Andy Thomas