对 javadoc 中方法参数的可重构引用

Refactorable reference to a method parameter in javadoc

如何在 javadoc 中引用方法参数,以便重构引用?
例如:

public class A {

    private int field;

    /**
     * @param p 
     * {@link #field} is initialized using the value of p.
     */
    void foo(int p)
    {
        //...

    }
}       

如果我在上面的代码中重命名参数 p,我想要

"...using the value of p"

相应更改的文本(就像重命名字段会更改 {@link #field} 一样)。
我阅读了 this 旧的 post 和更多资源,但找不到方法。
javadoc 支持吗?

由于 Java 擦除,方法参数名称是临时的,它们不是静态 class 定义的一部分。因此,将 void foo(int p) 更改为 void foo(int x) 不被视为重构,因为它保证不会以任何方式影响程序的逻辑(除非参数重载 class 字段)。

所以在 javadoc 中不能有静态的 link 来标识方法参数。当您重构方法时 @param 之后的词发生变化这一事实是 IDE.

提供的帮助

您是否尝试过配置 eclipse javadoc 首选项? Window->首选项,Java->编译器->Javadoc。检查处理Java文档评论选项。

另外如果你勾选Window->Preferences->Java->Editor->Typing->Javadoc and comment regions+添加 Javadoc 标签 它将添加适当的 javadoc 标签。一旦你已经激活 Eclipse 将警告你关于错误的参数,你可以使用 ctrl1 到 "quick-fix" 它。

如果您将 IDE 放在 @param 之后(在 Eclipse 中测试过),您的 IDE 将能够重构该名称,但如果您在评论中的其他地方引用它则不能。从语言的角度来看,没有理由这样做。为什么不直接写 @param p {@link #field} is initialized using this value.

IntelliJ IDEA 将重构 JavaDoc 注释中任何位置的参数名称,只要您将其放在大括号中即可,例如{@param p}

/**
 * @param p 
 * {@link #field} is initialized using the value of {@param p}.
 */

此外,Java 的类型擦除(如已接受的回复中所述)与变量名称的范围无关。类型擦除是 Java 设计人员为了添加 Java 泛型而实现的折衷方案,但仍保持语言向后兼容。泛型的所有参数化都被删除了——none 它实际上变成了字节码。这就是为什么 Java 泛型如此有限的原因 - 例如你不能做

T myT = new T();

如果 T 是参数化类型,因为在运行时有关 T 的所有信息都已被删除。