Как сослаться на метод в javadoc?

Как я могу использовать тег @link для ссылки на метод?

Я хочу изменить:

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

но я не знаю, как правильно отформатировать тег @link.


person Jason S    schedule 06.05.2011    source источник
comment
Я знаю, что это было несколько лет назад, но ... просмотр официальных классов Java может помочь найти любую форму форматирования Javadoc, которая вам нужна. Например, посмотрите HashMap Javadoc.   -  person Christophe Roussy    schedule 05.03.2014


Ответы (3)


Вы найдете много информации о JavaDoc в Спецификация комментариев к стандартной документации, включая информацию о

{@link package .class # лейбл участника}

тег (который вы ищете). Соответствующий пример из документации выглядит следующим образом

Например, вот комментарий, относящийся к методу getComponentAt (int, int):

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

Часть package.class может быть опущена, если упомянутый метод находится в текущем классе.


Другие полезные ссылки о JavaDoc:

person FrVaBe    schedule 06.05.2011

Общий формат из @ раздел ссылок документации javadoc:

{@link package.class # member label}

Примеры

Метод из того же класса:

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

Метод в другом классе либо в том же пакете, либо импортирован:

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

Метод в другом пакете, но не импортированный:

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

Ярлык, связанный с методом, в виде обычного текста, а не шрифта кода:

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

Цепочка вызовов методов, как в вашем вопросе. Мы должны указать метки для ссылок на методы вне этого класса, иначе мы получим getFoo().Foo.getBar().Bar.getBaz(). Но эти метки могут быть хрупкими во время рефакторинга - см. Этикетки ниже.

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

Этикетки

Автоматический рефакторинг не может повлиять на ярлыки. Сюда входит переименование метода, класса или пакета; и изменение сигнатуры метода.

Поэтому используйте метку только, если вы хотите, чтобы текст отличался от текста по умолчанию.

Например, вы можете связать человеческий язык с кодом:

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

Или вы можете сделать ссылку из образца кода с текстом, отличным от текста по умолчанию, как показано выше в разделе «Цепочка вызовов методов». Однако это может быть хрупким по мере развития API.

Введите стирание и #member

Если сигнатура метода включает параметризованные типы, используйте удаление этих типов в javadoc @link. Например:

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

/** See also {@link #bar(Collection)}. */
void foo() { ... }
person Andy Thomas    schedule 06.05.2011
comment
Подождите: мне просто нужно имя метода со ссылкой, мне также не нужно имя класса. - person Jason S; 06.05.2011
comment
Ах хорошо. Первый пример в приведенной выше ссылке иллюстрирует это. - person Andy Thomas; 06.05.2011
comment
+1 за предоставление ссылки Java 6, на которую я не был связан со страницы Oracle JavaDoc HowTo. Я все еще не могу справиться со ссылками на оракул ... (исправленные ссылки на Java 6 в моем ответе). - person FrVaBe; 06.05.2011
comment
@K. Claszen: download.oracle.com/javase/6/docs, затем нажмите javadoc на диаграмме, затем выберите Справочная страница инструмента Javadoc (Microsoft Windows), затем теги Javadoc. - person Paŭlo Ebermann; 07.05.2011
comment
@ Paŭlo Ebermann Спасибо! В будущем постараюсь использовать страницу "документы" как точку входа. - person FrVaBe; 07.05.2011
comment
@zasadnyy - Спасибо за попытку добавить важное замечание о дженериках. Понравился, но раньше других не попал в обзор. К ответу выше я добавил раздел #member and generics. - person Andy Thomas; 09.12.2015
comment
Этикетка сохраняет ссылку короткой, скрывая информацию о пакете и классе. Замечательно! - person Jose Tepedino; 07.04.2019
comment
@JoseTepedino - метка вредна, если может произойти рефакторинг - а рефакторинг в наши дни очень прост, поскольку код не передается третьим лицам. - person Andy Thomas; 07.04.2019

вы можете использовать @see для этого:

образец:

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();
    }
person vuhung3990    schedule 12.01.2017
comment
OP: Как я могу использовать тег @link для ссылки на метод? Тег @link может использоваться внутри абзаца по запросу OP. Тег @see не может. См. Более подробную информацию в этом вопросе. - person Andy Thomas; 13.01.2017