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

时间:2013-11-06 09:00:19

标签: java intellij-idea documentation javadoc

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

1)放置javadoc标签的首选地点是什么:如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() {}   
}

2 个答案:

答案 0 :(得分:30)

我不认为Kayaman的答案是充分的,因为问题是如何在javadocs中使用@value标记。

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

在日食中,当你有

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

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

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

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

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

答案 1 :(得分:3)

  

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

non-constant expressions添加到Javadoc没有多大意义。

首先,人们可能会认为最明智的行为是向Javadoc添加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;

所以将0添加到Javadoc并不意味着什么。

它只适用于字符串,因为它们是不可变的,JLS明确地这样说:没有办法告诉编译器在自定义类上。