Ошибка Javadoc: @link не может обрабатывать универсальные символы "<>" - PullRequest
30 голосов
/ 28 февраля 2012

Рассмотрим статический метод в классе, который я задокументировал, используя javadoc :

/**
 * Description here.
 *
 * @param names       - The parameters of the impression request.
 * @param ids         - An intent object to enrich.
 * @param prefix - A prefix.
 */

public static void parse(Map<String, String> names, String ids, String prefix)
    ...

Чтобы не дублировать описание в перегруженных версиях метода, я хотел бы использовать javadoc @link:

 /**
 * Overloaded version with default prefix.
 * {@link #<parse(Map<String, String>, String, String)> [Text]}
 */

public static void parse(Map<String, String> names, String ids, String prefix)

Что дает следующее предупреждение:

@link:illegal character: "60" in "#parseBtCategories(Map<String, String>, 
                                                     String, String) Text"

ASCII 60 - это <, который является частью сигнатуры метода. Он работает с Map, String, String) гайкой, эта нотация не может различить два разных типа карт.

Кажется, это известная ошибка. Есть ли хороший обходной путь?

Ответы [ 3 ]

22 голосов
/ 03 марта 2012

Параметрированные типы НЕ являются частью сигнатуры метода .

Java реализует Обобщения с Тип Erasure . Концепция типа Erasure заключается в том, что универсальные типы доступны только во время компиляции, после чего они «стираются»; это означает, что они удалены из байт-кода класса. Таким образом, они недоступны во время выполнения и не являются частью сигнатуры метода .

Таким образом, у них нет реальной причины быть частью подписи ссылки Javadoc, потому что вы не можете перегружать два метода универсальными типами, которые разрешают к одним и тем же необработанным типам : не может быть неоднозначности в универсальные типы в подписи вашего источника.

Кроме того, Javadoc поддерживает HTML-теги, и я предполагаю, что это может быть еще одной причиной, по которой он здесь пылится, но я действительно сомневаюсь, что инструмент обработки Javadoc был так плохо реализован.

19 голосов
/ 19 марта 2014

Аналогично решению David Conrad , вы можете использовать полную подпись в качестве описания ссылки, используя синтаксис:

{@link class#method(signature) text-to-display}

Не забудьте убежать < и >. Например:

 {@link #parse(Map, String, String) parse(Map&lt;String, String&gt;, String, String)}
1 голос
/ 19 октября 2015

Возможно, это не то, что вы ищете, но я научился жить с чем-то вроде * @return {@link List} из {@link RfRequestSummaryDto}

...