Подтвердить что ты не робот

Ошибка Javadoc: @link не может обрабатывать Generics "<>"

Рассмотрим статический метод в классе, который я документировал с помощью 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), эта нотация не может различать два разных типа карт.

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

 {@link #parse(Map, String, String) parse(Map&lt;String, String&gt;, String, String)}

Ответ 3

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