Como referenciar um método em javadoc?


864

Como posso usar a @linktag para vincular a um método?

Eu quero mudar:

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

para:

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

mas não sei como formatar a @linktag corretamente.


22
Eu sei que isso foi há alguns anos atrás, mas ... olhar para as classes oficiais do Java pode ajudar a encontrar qualquer forma de formatação Javadoc necessária. Por exemplo, veja o Javadoc HashMap.
Christophe Roussy

Respostas:


1122

Você encontrará muitas informações sobre o JavaDoc na Especificação de Comentários da Documentação do Doclet Padrão , incluindo as informações no

{@link package.class # member label}

tag (que você está procurando). O exemplo correspondente da documentação é o seguinte

Por exemplo, aqui está um comentário que se refere ao método getComponentAt (int, int):

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

A package.classpeça pode ser omitida se o método referido estiver na classe atual.


Outros links úteis sobre o JavaDoc são:


743

O formato geral, da seção @link da documentação do javadoc , é:

{@link package.class # member label}

Exemplos

Método na mesma classe:

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

Método em um classe diferente, no mesmo pacote ou importado:

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

Método em um pacote diferente e não importado:

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

Rótulo vinculado ao método, em texto simples, em vez de fonte de código:

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

Uma cadeia de chamadas de método, como na sua pergunta. Temos que especificar rótulos para os links para métodos fora desta classe, ou obtemos getFoo().Foo.getBar().Bar.getBaz(). Mas esses rótulos podem ser frágeis; consulte "Etiquetas" abaixo.

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

Etiquetas

A refatoração automatizada pode não afetar os rótulos. Isso inclui renomear o método, classe ou pacote; e alterando a assinatura do método.

Portanto, forneça um rótulo apenas se desejar um texto diferente do padrão.

Por exemplo, você pode vincular da linguagem humana ao código:

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

Ou você pode vincular a partir de um exemplo de código com texto diferente do padrão, como mostrado acima em "Uma cadeia de chamadas de método". No entanto, isso pode ser frágil enquanto as APIs estão evoluindo.

Digite apagamento e #member

Se a assinatura do método incluir tipos parametrizados, use o apagamento desses tipos no javadoc @link. Por exemplo:

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

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

Espere: eu só quero o nome do método com um link, não quero o nome da classe também.
Jason S

Ah ok. O primeiro exemplo no link acima ilustra isso.
Andy Thomas

1
+1 por fornecer um link do Java 6 ao qual eu não estava vinculado na página Oracle JavaDoc HowTo. Ainda não consigo me dar bem com os links do oracle ... (links fixos para Java 6 na minha resposta).
FrVaBe


@ Paolo Ebermann Obrigado! Tentará usar a página 'docs' como ponto de entrada no futuro.
FrVaBe 7/11

16

você pode usar @see para fazer isso:

amostra:

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: "Como posso usar a tag @link para vincular a um método?" A tag @link pode ser usada em linha dentro de um parágrafo, conforme solicitado pelo OP. A tag @see não pode. Veja mais detalhes nesta pergunta .
Andy Thomas
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.