Come fare riferimento a un metodo in javadoc?


864

Come posso usare il @linktag per collegarmi a un metodo?

Voglio cambiare:

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

per:

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

ma non so come formattare @linkcorrettamente il tag.


22
So che è successo qualche anno fa, ma ... guardare le classi Java ufficiali può aiutarti a trovare qualsiasi forma di formattazione Javadoc di cui hai bisogno. Ad esempio, guarda HashMap Javadoc.
Christophe Roussy,

Risposte:


1122

Troverai molte informazioni su JavaDoc nelle Specifiche dei commenti alla documentazione per il Doclet standard , comprese le informazioni sul file

{@link package.class # etichetta membro}

tag (che stai cercando). L'esempio corrispondente dalla documentazione è il seguente

Ad esempio, ecco un commento che si riferisce al metodo getComponentAt (int, int):

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

La package.classparte può essere attivata se il metodo indicato è nella classe corrente.


Altri link utili su JavaDoc sono:


743

Il formato generale, dalla sezione @link della documentazione javadoc , è:

{@link package.class # etichetta membro}

Esempi

Metodo nella stessa classe:

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

Metodo in una classe diversa, nello stesso pacchetto o importato:

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

Metodo in un pacchetto diverso e non importato:

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

Etichetta collegata al metodo, in testo semplice anziché in carattere di codice:

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

Una catena di metodi chiama, come nella tua domanda. Dobbiamo specificare le etichette per i collegamenti a metodi esterni a questa classe, oppure otteniamo getFoo().Foo.getBar().Bar.getBaz(). Ma queste etichette possono essere fragili; vedere "Etichette" di seguito.

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

etichette

Il refactoring automatizzato potrebbe non influire sulle etichette. Ciò include la ridenominazione del metodo, della classe o del pacchetto; e cambiando la firma del metodo.

Pertanto, fornire un'etichetta solo se si desidera un testo diverso da quello predefinito.

Ad esempio, potresti collegare dal linguaggio umano al codice:

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

Oppure potresti collegare un esempio di codice con un testo diverso da quello predefinito, come mostrato sopra in "Una catena di chiamate di metodo". Tuttavia, questo può essere fragile mentre le API si stanno evolvendo.

Digita cancellatura e #membro

Se la firma del metodo include tipi con parametri, utilizzare la cancellazione di tali tipi in javadoc @link. Per esempio:

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

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

Aspetta: voglio solo il nome del metodo con un link, non voglio anche il nome della classe.
Jason S,

Ah ok. Il primo esempio nel link sopra illustra questo.
Andy Thomas,

1
+1 per aver fornito un collegamento Java 6 a cui non ero collegato dalla pagina Oracle JavaDoc HowTo. Non riesco ancora ad andare d'accordo con i collegamenti dell'oracolo ... (collegamenti fissi a Java 6 nella mia risposta).
FrVaBe,

@K. Claszen: download.oracle.com/javase/6/docs , quindi fare clic su javadoc nel diagramma, quindi selezionare Pagina di riferimento dello strumento Javadoc (Microsoft Windows) , quindi i tag Javadoc .
Paŭlo Ebermann,

@ Paŭlo Ebermann Grazie! In futuro cercherà di utilizzare la pagina "documenti" come punto di accesso.
FrVaBe

16

puoi usare @seeper farlo:

campione:

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: "Come posso usare il tag @link per collegarmi a un metodo?" Il tag @link può essere utilizzato in linea all'interno di un paragrafo, come richiesto dall'OP. Il tag @see non può. Vedi maggiori dettagli a questa domanda .
Andy Thomas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.