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

2022-09-01 02:08:54

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

1)放置javadoc标签的首选位置是什么:like or ?ob1ob2

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() {}   
}

答案 1

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

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

在日食中,当你有

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

生成的 Javadocs 是 {@value #ob2} object2 描述。但是,当您有

/**
 * {@value #ob2} object2 description
 */ 
public static final String ob2 = "hello";

生成的 Javadocs 是“hello” object2 描述(预期的输出)。

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


答案 2

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

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

起初,人们可能会认为最明智的做法是向 Javadoc 添加 a。但是,如果你有一个可变对象,会发生什么,比如:toString

class MutableInteger {
    public int i;
    public String toString() { return Integer.toString(i); }
}

和Javadoc,如:

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

然后,人们可以简单地稍后执行以下操作:

Class.obj.i = 1;

因此,添加到Javadoc中没有多大意义。0

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


推荐