¿Cómo hacer referencia a un método en javadoc?

864

¿Cómo puedo usar la @linketiqueta para vincular a un método?

Quiero cambiar:

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

a:

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

pero no sé cómo formatear la @linketiqueta correctamente.

Jason S
fuente
22
Sé que esto fue hace unos años, pero ... mirar las clases oficiales de Java puede ayudarlo a encontrar cualquier forma de formato Javadoc que necesite. Por ejemplo, mire el HashMap Javadoc.
Christophe Roussy

Respuestas:

1122

Encontrará mucha información sobre JavaDoc en la Especificación de comentarios de documentación para el Doclet estándar , incluida la información en

{@link package.class # member label}

etiqueta (que estás buscando). El ejemplo correspondiente de la documentación es el siguiente

Por ejemplo, aquí hay un comentario que se refiere al método getComponentAt (int, int):

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

La package.classparte se puede omitir si el método referido está en la clase actual.


Otros enlaces útiles sobre JavaDoc son:

FrVaBe
fuente
743

El formato general, de la sección @link de la documentación de javadoc , es:

{@link package.class # member label}

Ejemplos

Método en la misma clase:

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

Método en una clase diferente, ya sea en el mismo paquete o importado:

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

Método en un paquete diferente y no importado:

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

Etiqueta vinculada al método, en texto plano en lugar de fuente de código:

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

Una cadena de llamadas a métodos, como en su pregunta. Tenemos que especificar etiquetas para los enlaces a métodos fuera de esta clase, o lo obtenemos getFoo().Foo.getBar().Bar.getBaz(). Pero estas etiquetas pueden ser frágiles; ver "Etiquetas" a continuación.

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

Etiquetas

La refactorización automática puede no afectar las etiquetas. Esto incluye renombrar el método, clase o paquete; y cambiando la firma del método.

Por lo tanto, proporcione una etiqueta solo si desea un texto diferente al predeterminado.

Por ejemplo, puede vincular del lenguaje humano al código:

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

O puede vincular desde una muestra de código con un texto diferente al predeterminado, como se muestra arriba en "Una cadena de llamadas a métodos". Sin embargo, esto puede ser frágil mientras las API evolucionan.

Tipo de borrado y #member

Si la firma del método incluye tipos parametrizados, use la eliminación de esos tipos en el javadoc @link. Por ejemplo:

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

/** See also {@link #bar(Collection)}. */
void foo() { ... }
Andy Thomas
fuente
Espere: solo quiero el nombre del método con un enlace, no quiero el nombre de la clase también.
Jason S
Ah bien. El primer ejemplo en el enlace de arriba ilustra eso.
Andy Thomas
1
+1 por proporcionar un enlace Java 6 al que no estaba vinculado desde la página de Oracle JavaDoc HowTo. Todavía no puedo llevarme bien con los enlaces de Oracle ... (enlaces fijos a Java 6 en mi respuesta).
Viernes
@K. Claszen: download.oracle.com/javase/6/docs , luego haga clic en javadoc en el diagrama, luego elija Página de referencia de herramientas Javadoc (Microsoft Windows) , luego etiquetas Javadoc .
Paŭlo Ebermann
@ Paŭlo Ebermann Gracias! Intentará usar la página 'docs' como punto de entrada en el futuro.
Viernes
16

puedes usar @seepara hacer eso:

muestra:

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
fuente
44
OP: "¿Cómo puedo usar la etiqueta @link para vincular a un método?" La etiqueta @link se puede usar en línea dentro de un párrafo, según lo solicitado por el OP. La etiqueta @see no puede. Ver más detalles en esta pregunta .
Andy Thomas el