【问题标题】:Refactorable reference to a method parameter in javadocjavadoc中对方法参数的可重构引用
【发布时间】:2016-11-15 17:55:01
【问题描述】:

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

public class A {

    private int field;

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

    }
}       

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

"...使用 p 的值"

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

【问题讨论】:

  • 您链接到的问答非常清楚地表明 JavaDoc 中没有这样的功能。为什么这个问题不应该重复关闭?

标签: java eclipse refactoring javadoc


【解决方案1】:

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

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

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

T myT = new T();

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

【讨论】:

  • 他说的不是泛型类型擦除,而是一般意义上的擦除——参数名称确实被擦除了。
【解决方案2】:

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

【讨论】:

  • 感谢您的回答。是的,我知道它适用于 @param p and some text 。它不适用于some text @param p
【解决方案3】:

您是否尝试过配置 eclipse javadoc 首选项? 窗口->首选项,Java->编译器->Javadoc。检查 Process Javadoc cmets 选项。

此外,如果您检查 Window->Preferences->Java->Editor->Typing->Javadoc 和注释区域+Add Javadoc tags,它将添加适当的 javadoc 标签.一旦你都激活了 Eclipse 会警告你错误的参数,你可以使用 ctrl1 来“快速修复”它。

【讨论】:

  • 感谢您的回答。这些选项很有帮助。他们对我提出的问题没有帮助。
【解决方案4】:

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

所以在 javadoc 中不能有标识方法参数的静态链接。重构方法时 @param 之后的单词会发生变化这一事实是 IDE 提供的一个好处。

【讨论】:

    猜你喜欢
    • 2010-12-12
    • 2011-07-12
    • 1970-01-01
    • 2011-02-03
    • 2013-04-01
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多