Javadoc ссылка на метод в другом классе

238

В настоящее время я ссылаюсь на методы в других классах с этим синтаксисом Javadoc:

@see {@link com.my.package.Class#method()}

И в том, что я понимаю из документации, это правильный способ сделать это. Но теперь самое смешное или неприятное. Когда я генерирую этот javadoc, я в первую очередь получаю следующую ошибку:

warning - Tag @see:illegal character: "123" in "{@link com.my.package.Class#method()}"
warning - Tag @see:illegal character: "64" in "{@link com.my.package.Class#method()}"
warning - Tag @see: reference not found: {@link com.my.package.Class#method()}

Сгенерированный HTML-код этого:

"," <code>com.my.package.Class#method()}</code> ","

И конечно у меня нет ссылки. Может кто-нибудь сказать мне, что происходит, и какие-либо советы о том, как это исправить?

Согласно таблице ASCII символы 123 и 64 для wold представляют {и @, так почему же эти символы недопустимы, если этот синтаксис правильный в соответствии с документацией?

Роберт
источник
1
Просто чтобы проверить ... вы читали документацию по Javadoc Generator? docs.oracle.com/javase/7/docs/technotes/tools/windows/…
Диого Морейра
Вы импортировали com.my.package.Classв класс этот JavaDoc написан? Ссылки не найден кажется странным. С другой стороны, я никогда не использовал их вместе, но есть шанс, что @seeи @linkконфликтовать друг с другом, принимая тот факт, что он @seeгенерирует свою собственную секунду, меня это не удивит.
Фриц
1
@DiogoMoreira - Нет, я не читал о двигателе, но я проверю его.
Роберт
@Gamb - Конечно, это не мой фактический ввод Javadoc ;-) Да, все операции импорта осуществлены.
Роберт
1
Аналогичная ошибка возникает, если в качестве значения @seeтега в вашем javadoc вы указали необработанную гиперссылку . Чтобы исправить это, в этом случае оберните гиперссылку в HTML-элемент привязки:/** @see <a href="http://example.com">Example</a> */
кибер-монах

Ответы:

280

Для тега Javadoc @seeвам не нужно использовать @link; Javadoc создаст для вас ссылку. Пытаться

@see com.my.package.Class#method()

Вот больше информации о @see.

rgettman
источник
Спасибо за это, я только что проверил это решение, и это прекрасно работает! Но я читал во многих местах, что вы должны использовать ссылку, чтобы увидеть, как это работает, так что это немного странно ...
Robert
7
Вы можете использовать @linkв других местах, которые Javadoc еще не превратили в ссылку, например, в описании @param, в описании @return, в основной части описания и т. Д.
rgettman
1
когда я только что попробовал это, он отображает метод в виде простого текста, он не кликабелен, как мой @see для локального метода.
ДжессиБойд
146

Помимо @seeболее общего способа ссылки на другой класс и, возможно, метод этого класса {@link somepackage.SomeClass#someMethod(paramTypes)}. Это имеет то преимущество, что его можно использовать в середине описания Javadoc.

Из документации javadoc (описание тега @link) :

Этот тег очень похож на @see - оба требуют одинаковых ссылок и принимают одинаковый синтаксис для package.class # member и label. Основное отличие состоит в том, что {@link} генерирует встроенную ссылку, а не помещает ссылку в разделе «См. Также». Кроме того, тег {@link} начинается и заканчивается фигурными скобками, чтобы отделить его от остального встроенного текста.

Javarome
источник
68

Таким образом, решение исходной проблемы состоит в том, что вам не нужны ссылки "@see" и "{@link ...}" в одной строке. Тег @link является самодостаточным, и, как уже было отмечено, вы можете поместить его в любое место блока javadoc. Таким образом, вы можете смешать два подхода:

/**
 * some javadoc stuff
 * {@link com.my.package.Class#method()}
 * more stuff
 * @see com.my.package.AnotherClass
 */
Дэйв Хентчел
источник
4
Это должно быть принято отвечать , потому что другие два ответа не показывают , что «@link» или «» @see необходимость быть в нескольких строк комментария / ** * / не одна строка
Стойчо Андреев
1
@Sniper, {@link }отлично работает в однострочном комментарии Javadoc. Возможно, вы ссылаетесь на тот факт, что они не работают с комментариями, начинающимися с //? /** */является Javadoc и необходим для любых функций Javadoc.
Джейс
Да @Jase Я встретил именно это, комментарий должен быть / ** * /, но не //
Стойчо Андреев
6
@Sniper Я не думаю, что это требует того, чтобы быть принятым ответом, потому что это вопрос Javadoc для начала - следует понимать, что Javadoc работает только в комментариях Javadoc.
Джейс
@Jase вроде бы с вами согласен, но я считаю, что источник информации, такой как Stackoverflow, нуждается в пояснениях с помощью примеров, а не цитат из документации Oracle или какой-либо другой документации, что, очевидно, не ясно. Этот ответ является единственным ответом, у которого есть пример, над двумя ответами есть кавычки.
Стойчо Андреев