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

864

Как я могу использовать @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тег.

Джейсон С
источник
22
Я знаю, что это было несколько лет назад, но ... просмотр официальных классов Java может помочь найти любую форму форматирования Javadoc, которая вам нужна. Например, посмотрите на HashMap Javadoc.
Кристоф Русси

Ответы:

1122

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

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

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

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

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

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


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

FrVaBe
источник
743

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

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

Примеры

Метод в том же классе:

/** 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() { ... }
Энди Томас
источник
Подождите: я просто хочу имя метода со ссылкой, я также не хочу имя класса.
Джейсон С
Ах хорошо. Первый пример в ссылке выше иллюстрирует это.
Энди Томас
1
+1 за предоставление ссылки Java 6, на которую я не был связан со страницы Oracle JavaDoc HowTo. Я до сих пор не могу ужиться со ссылками на оракула ... (в моем ответе исправлены ссылки на Java 6).
FrVaBe
@K. Claszen: download.oracle.com/javase/6/docs , затем щелкните javadoc на диаграмме, затем выберите « Справочную страницу инструмента Javadoc» (Microsoft Windows) , а затем теги Javadoc .
Пауло Эберманн
@ Paŭlo Ebermann Спасибо! Постараюсь использовать страницу «документы» в качестве точки входа в будущем.
FrVaBe
16

Вы можете использовать @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();
    }
vuhung3990
источник
4
ОП: «Как я могу использовать тег @link для ссылки на метод?» @Link тег может быть использован встроенный в пункте, в соответствии с просьбой ОП. @See тег не может. Подробнее смотрите в этом вопросе .
Энди Томас