我使用的是带私有构造函数的类而不是枚举(这是一个要求)。现在我正在尝试添加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() {}
}
答案 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明确地这样说:没有办法告诉编译器在自定义类上。