Generics Javadoc bug:@link can';t处理泛型“<&燃气轮机&引用;

Generics Javadoc bug:@link can';t处理泛型“<&燃气轮机&引用;,generics,javadoc,Generics,Javadoc,考虑一个类中的静态方法,我已经使用以下方法对其进行了记录: /** *这里是描述。 * *@param names-impression请求的参数。 *@param ids-一个用于丰富内容的意图对象。 *@param prefix-一个前缀。 */ 公共静态void解析(映射名称、字符串ID、字符串前缀) ... 为了避免在方法的重载版本中重复描述,我想使用javadoc@link: /** *具有默认前缀的重载版本。 *{@link#[Text]} */ 公共静态void解析(映射名称、字

考虑一个类中的静态方法,我已经使用以下方法对其进行了记录:

/**
*这里是描述。
*
*@param names-impression请求的参数。
*@param ids-一个用于丰富内容的意图对象。
*@param prefix-一个前缀。
*/
公共静态void解析(映射名称、字符串ID、字符串前缀)
...
为了避免在方法的重载版本中重复描述,我想使用javadoc
@link

/**
*具有默认前缀的重载版本。
*{@link#[Text]}
*/
公共静态void解析(映射名称、字符串ID、字符串前缀)
它给出了以下警告:

@link:parseBtCategories(地图、,
字符串,字符串)文本“

ASCII 60是
参数化类型不是方法签名的一部分

Java使用实现。问题是,只有在编译时才可用,此时它们被“擦除”;这意味着它们被从类的字节码中剥离。因此,它们在运行时是不可访问的,并且不是方法签名的一部分

因此,没有真正的理由让它们成为Javadoc链接签名的一部分,因为不能用解析为相同原始类型的泛型类型重载两个方法:源签名中的泛型类型不能有歧义


此外,Javadoc支持HTML标记,我认为这可能是它在这里大做文章的另一个原因,但我真的怀疑Javadoc处理工具的实现是否如此糟糕。

David Conrad解决方案类似,您可以使用完整签名作为链接描述,使用语法:

{@link class#method(signature) text-to-display}
记得转义
。例如:

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

这可能不是你想要的,但我已经学会了和这样的东西一起生活
*{@link RfRequestSummaryDto}的@return{@link List}

我认为这个论点站不住脚。仅仅因为编译器使用类型擦除实现泛型,并不排除文档中包含泛型类型参数。泛型和文档是为人编写的,而字节码是为JVM编写的。类型擦除更倾向于JVM,因此它在这里并不密切相关。在我遇到的一个例子中,它描述了参数的类型,链接看起来像
{@link List}
。如果您删除它,javadoc最终只会将参数描述为一个列表。这对打电话的人没有什么帮助。为什么要把它作为一个链接呢?这样他们就可以点击它了。在这种情况下,一个很好的解决方案是
{@link List}{@link Customer}
,它允许他们根据他们想要看到的内容来单击指向列表或客户的链接。java文档的目的是提供设计过程中预期内容的数据。因此,我也强烈认为Javadoc应该允许泛型,向开发人员提供所有的信息,让他们知道应该返回什么或者提供什么作为参数。参数化类型是编译时方法签名的一部分。在编译时,类型擦除将具有参数化类型的签名映射到具有原始类型的签名。例如,请参阅JLS 4.6:Type Erasure。我倾向于通过这样做来解决这个问题:{@link EventHandler}{@code}只是为了确保:您真的在使用
{@link}吗?这个文档应该如何记录返回类型?我见过一些库和框架这样做。在这一点上似乎是一个惯例。