Comment référencer une méthode en javadoc?

864

Comment puis-je utiliser la @linkbalise pour créer un lien vers une méthode?

Je veux changer:

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

mais je ne sais pas comment formater @linkcorrectement la balise.

Jason S
la source
22
Je sais que c'est il y a quelques années mais ... regarder les classes Java officielles peut vous aider à trouver n'importe quelle forme de formatage Javadoc dont vous avez besoin. Par exemple, regardez le Javadoc HashMap.
Christophe Roussy

Réponses:

1122

Vous trouverez beaucoup d'informations sur JavaDoc dans la spécification de commentaire de documentation pour le doclet standard , y compris les informations sur le

{@link package.class # label membre}

tag (que vous recherchez). L'exemple correspondant de la documentation est le suivant

Par exemple, voici un commentaire qui fait référence à la méthode getComponentAt (int, int):

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

La package.classpartie peut être omise si la méthode référencée est dans la classe courante.


D'autres liens utiles sur JavaDoc sont:

FrVaBe
la source
743

Le format général, extrait de la section @link de la documentation javadoc , est le suivant:

{@link package.class # label membre}

Exemples

Méthode dans la même classe:

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

Méthode dans une classe différente, dans le même package ou importée:

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

Méthode dans un package différent et non importé:

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

Libellé lié à la méthode, en texte brut plutôt qu'en police de code:

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

Une chaîne d'appels de méthode, comme dans votre question. Nous devons spécifier des étiquettes pour les liens vers des méthodes en dehors de cette classe, ou nous obtenons getFoo().Foo.getBar().Bar.getBaz(). Mais ces étiquettes peuvent être fragiles; voir "Étiquettes" ci-dessous.

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

Étiquettes

Le refactoring automatisé peut ne pas affecter les étiquettes. Cela inclut le changement de nom de la méthode, de la classe ou du package; et changer la signature de la méthode.

Par conséquent, ne fournissez une étiquette que si vous souhaitez un texte différent de celui par défaut.

Par exemple, vous pouvez lier du langage humain au code:

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

Ou vous pouvez créer un lien à partir d'un exemple de code avec un texte différent de celui par défaut, comme indiqué ci-dessus sous «Une chaîne d'appels de méthode». Cependant, cela peut être fragile pendant que les API évoluent.

Effacer le type et #membre

Si la signature de méthode inclut des types paramétrés, utilisez l'effacement de ces types dans le javadoc @link. Par exemple:

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

/** See also {@link #bar(Collection)}. */
void foo() { ... }
Andy Thomas
la source
Attendez: je veux juste le nom de la méthode avec un lien, je ne veux pas aussi le nom de la classe.
Jason S
Ah ok. Le premier exemple du lien ci-dessus illustre cela.
Andy Thomas
1
+1 pour avoir fourni un lien Java 6 auquel je n'étais pas lié depuis la page Oracle JavaDoc HowTo. Je ne peux toujours pas m'entendre avec les liens Oracle ... (liens fixes vers Java 6 dans ma réponse).
FrVaBe
@K. Claszen: download.oracle.com/javase/6/docs , puis cliquez sur javadoc dans le diagramme, puis choisissez la page de référence de l'outil Javadoc (Microsoft Windows) , puis les balises Javadoc .
Paŭlo Ebermann
@ Paŭlo Ebermann Merci! J'essaierai d'utiliser la page "docs" comme point d'entrée à l'avenir.
FrVaBe
16

vous pouvez utiliser @seepour cela:

échantillon:

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
la source
4
OP: "Comment puis-je utiliser la balise @link pour créer un lien vers une méthode?" La balise @link peut être utilisée en ligne dans un paragraphe, comme demandé par l'OP. La balise @see ne peut pas. Voir plus de détails à cette question .
Andy Thomas