如何在javadoc中使用@value标签?

Nik*_*sov 37 java documentation javadoc intellij-idea

我正在使用一个私有构造函数而不是枚举的类(这是一个要求).现在我正在尝试添加javadoc标记来记录每个public static final实体.

1)放置javadoc标签的首选位置:喜欢ob1还是ob2

2)两个选项都会在IDEA中产生错误 @value tag must reference field with a constant intializer.

/**
 * {@value #ob1} object1 description
 */

public class MyClass {
    public static final Object ob1 = new Object();

    /**
     * {@value #ob2} object2 description
     */ 
    public static final Object ob2 = new Object();

    private MyClass() {}   
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*esB 33

我不认为Kayaman的答案是足够的,因为问题是如何在javadocs中使用@value标签.

我认为问题在于被引用字段的值不是字面值.

在日食中,当你有

/**
 * {@value #ob2} object2 description
 */ 
public static final Object ob2 = new Object();
Run Code Online (Sandbox Code Playgroud)

生成的Javadocs是{@value#ob2} object2 description.但是,当你有

/**
 * {@value #ob2} object2 description
 */ 
public static final String ob2 = "hello";
Run Code Online (Sandbox Code Playgroud)

生成的Javadocs是"hello"object2 description(预期输出).

因此,总而言之,您在javadocs中正确使用@value标记,但只有在使用文字值初始化字段时才会正确呈现该值.

  • 要添加到@JamesB答案,`@ value`参数引用的值必须是常量(即static和final),并且是具有常量初始值设定项的类型.在_general_中,这意味着字符串和基元. (7认同)
  • 我通过将 `@value` 更改为 `@link` 来修复我的项目中的类似错误。 (3认同)

Cir*_*四事件 5

2) 这两个选项都会在 IDEA 中产生错误 @value 标签必须使用常量初始化器引用字段。

向 Javadoc添加非常量表达式没有多大意义。

起初,人们可能认为最明智的行为是toString在 Javadoc 中添加一个。但是,如果你有一个像这样的可变对象会发生什么:

class MutableInteger {
    public int i;
    public String toString() { return Integer.toString(i); }
}
Run Code Online (Sandbox Code Playgroud)

和一个 Javadoc,如:

/**
 * {@value #obj}
 */
class Class {
    public static final MutableInteger obj = new MutableInteger(0);
}
Run Code Online (Sandbox Code Playgroud)

然后人们可以稍后简单地做:

Class.obj.i = 1;
Run Code Online (Sandbox Code Playgroud)

所以添加0到 Javadoc 没有多大意义。

它仅适用于字符串,因为它们是不可变的,并且 JLS 明确表示:您无法在自定义类上告诉编译器。