Посилання 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? docs.oracle.com/javase/7/docs/technotes/tools/windows/…
Diogo Moreira

Ви імпортували com.my.package.Classв клас написаний цей JavaDoc? Посилання не знайдено здається дивним. З іншого боку, я ніколи не використовував їх у поєднанні, але є ймовірність, що @seeі @linkконфліктувати між собою, вважаючи, що це @seeгенерує свій власний розділ, це не здивувало б мене.
Фріц

1
@DiogoMoreira - Ні, я не читав про двигун, але перевіряю його.
Роберт

@Gamb - Звичайно, це не моє фактичне введення Javadoc ;-) Так, весь імпорт є на місці.
Роберт

1
Аналогічна помилка виникає, якщо ви ставите необроблене гіперпосилання як значення для @seeтегу у своєму javadoc. Щоб виправити це в цьому випадку, загорніть гіперпосилання в елемент прив’язки html:/** @see <a href="http://example.com">Example</a> */
cyber-monk

Відповіді:


280

Для тегу Javadoc @seeне потрібно використовувати @link; Javadoc створить для вас посилання. Спробуйте

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

Ось більше інформації про @see.


Дякую за це, я щойно перевірив це рішення, і це прекрасно працює! Але я читав у стільки місцях, що вам слід скористатися посиланням, щоб переконатися, що це працює, тому це трохи дивно ...
Роберт

7
Ви можете використовувати @linkв інших місцях, які Javadoc вже не перетворює на посилання, наприклад, в описі @param, в описі @return, в основній частині опису тощо
rgettman

1
коли я просто спробував це, він відображає метод як звичайний текст, його не можна натискати, як мій @see для локального методу.
JesseBoyd

146

Крім @seeзагального способу переходу до іншого класу та, можливо, методу цього класу є {@link somepackage.SomeClass#someMethod(paramTypes)}. Це має перевагу в тому, що можна використовувати в середині опису javadoc.

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

Цей тег дуже схожий на @see - обидва вимагають однакових посилань і приймають абсолютно однаковий синтаксис для Packa.class # члена та мітки. Основна відмінність полягає в тому, що {@link} створює поточне посилання, а не розміщувати посилання в розділі "Дивіться також". Також тег {@link} починається і закінчується фігурними дужками, щоб відокремити його від решти рядкового тексту.


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

Так @Jase я зустрів саме це, коментар повинен бути / ** * /, але не //
Стойчо Андрєєв

6
@Sniper Я не думаю, що це вимагає прийняття відповіді, оскільки це питання Javadoc для початку - слід загалом розуміти, що Javadoc працює лише в коментарях Javadoc.
Jase

@Jase з вами згоден, але я вважаю, що таке джерело інформації, як Stackoverflow, потребує пояснень на прикладах, а не в цитатах з документації Oracle чи іншої документації, що очевидно не ясно. Ця відповідь є єдиною відповіддю, хто має приклад, вище двох відповідей - цитати.
Стойчо Андрєєв
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.