Ошибка 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)
, эта нотация не может различать два разных типа карт.
Это, кажется, известная ошибка. Есть ли хороший способ?
Ответы
Ответ 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<String, String>, String, String)}
Ответ 3
Возможно, это не то, что вы ищете, но я научился жить с чем-то вроде
* @return {@link List} {@link RfRequestSummaryDto}