考虑一个类中的静态方法,我已使用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)
这种符号无法区分两种不同类型的地图。
This seems to be a known bug.有一个好的解决方法吗?
答案 0 :(得分:22)
参数化类型不是方法签名的一部分。
Java使用 Generics 实现Type Erasure。 concept of Type Erasure是generic types仅在编译时可用,此时它们被“擦除”;意味着它们被从类的字节码中删除。因此,在运行时无法访问,不属于方法签名。
因此,没有真正的理由让它们成为Javadoc链接签名的一部分,因为你不能使用解析为相同原始类型的泛型类型重载两个方法:不存在歧义源代码签名中的泛型类型。
此外,Javadoc支持HTML标记,我认为这可能是它在这里沾沾自喜的另一个原因,但我真的怀疑Javadoc处理工具是否实现得非常糟糕。
答案 1 :(得分:19)
与 David Conrad 解决方案类似,您可以使用完整签名作为链接说明,使用语法:
{@link class#method(signature) text-to-display}
请记得逃避<
和>
。例如:
{@link #parse(Map, String, String) parse(Map<String, String>, String, String)}
答案 2 :(得分:1)
它可能不是你想要的东西,但我已经学会了类似的东西 * @return {@link List} {@link RfRequestSummaryDto}