41

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

1) 放置 javadoc 标签的首选位置是:likeob1还是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() {}   
}
4

2 回答 2

36

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

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

在日食中,当你有

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

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

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

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

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

于 2013-11-06T15:03:16.027 回答
5

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

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

起初,人们可能认为最明智的行为是将 a 添加toString到 Javadoc。但是,如果您有一个可变对象,例如:

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;

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

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

于 2015-04-03T10:23:43.197 回答