[英]Javadoc : document value of static final enum reference
假设我有:
public enum Color {
RED,
GREEN,
YELLOW
}
然后在我的代码的其他地方我有
public static final Color DEFAULT_COLOR = Color.RED;
现在我想向我的 Javadoc 的读者记录一下DEFAULT_COLOR
的值是什么(当然,我不重复自己)。 怎么做?
show up in Javadoc's "constant-values.html".问题是 - 如我所见 - 这样的引用(虽然声明static final
并指向枚举)出现在 Javadoc 的“constant-values.html”中。 我看不出它不应该的技术原因,但据我所知,它不应该。 也许我只是误解了?
确切地说,问题是关于 Enum 变量的static final
声明,其中右侧是 JLS 定义的单个标识符,因此不包括 RHS 是更复杂表达式的情况。 这类似于当前用于原始类型分配的 Javadoc 行为,如果 RHS 不是所谓的“常量表达式”,Javadoc 将不会尝试呈现。 我们当然可以期待 Javadoc 做同样的事情,我可以毫无疑问地渲染这个吗? 枚举分析,不是吗? 通过说 RHS 必须是单个标识符,我们将自己限制在 IMO 应该可以明确地为 Javadoc 呈现的东西。
正如评论已经说过的那样,只有当值是编译时常量时,javadoc才会渲染它(很少有东西是- true
, false
,数字文字,字符串常量是它开始的地方。所有操作数都是常量的运算符也是常量。那么任何用这样一个常量初始化的 static final 字段本身就是常量。因此, static final int foo = SOME_OTHER_FIELD + YET_ANOTHER + 5;
可以是常量。
这意味着 Color.RED 不是常数,因此不会显示。
这不仅仅是“解决问题”的问题,而是渲染的问题。
想象一下你写了这个:
private static final List<String> COUNTRIES = List.of(... all 300-or-so countries here_);
是否应该将整个列表注入到 javadoc 中? 希望这个例子清楚地表明答案并不总是“是”,画一条线也不是真的可行。
即使答案是肯定的,您如何建议 javadoc 呈现此信息? 只需获取原始源代码并将其直接转储到 html 中? 获取原始源代码并自动重新格式化它? 还有哪些其他选择?
Javadoc 不能假设它可以解析表达式。 想象一下表达式是:
public static final Color DEFAULT_COLOR = Math.random() > 0.5 ? Color.RED : Color.BLUE;
这应该清楚地表明,除了显示应用了某种程度的清理的源或根本没有显示之外,您没有任何可行的选择来呈现非 CTC。
您可能希望看到的是:
static {}
block is generated that generates these. For example, public static final long STAMP = System.currentTimeMillis();
is turned into a class file that has a static init 'method' that runs that code - you can' t 减少到一个常数)。 这是对所有 java 的相当大的更新,只是为了 javadoc,这很奇怪。public static final Color DEFAULT_COLOR = SomeOtherClass.DEFAULT_COLOR;
工作得一样好(如果它们是整数,它会),所以这使得javadoc
变得复杂和不一致。 只是不值得。第三个似乎很公平,例如:
/** {@showDefault} */
public static final Color DEFAULT_COLOR = Color.RED;
但是 javadoc 根本不能那样工作。
你不能。 对于那个很抱歉。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.