【发布时间】:2023-04-04 23:32:01
【问题描述】:
有没有办法让生成的“常量字段值”页面使用可读字符而不是整数作为char 类型常量?
例如,如果一个类包含以下常量:
public static final char YES = 'Y';
public static final char NO = 'N';
public static final char ERROR = 'E';
我希望 javadoc 常量字段值页面具有字符表示('Y'、'N'、'E')而不是整数版本(69、78、89)。
我们有数百个这样的,所以我不想去为每个事件添加一些特定的 javadoc 注释(例如,使用 @value)。
更新:感谢下面SubOptimal的回答,我设法使用我找到here的ConstantsSummaryWriterImpl的1.6版源代码,修改writeValue方法如下:
private void writeValue(FieldDoc member) {
tdAlign("right");
code();
if ("char".equals(member.type().toString())) {
print(Util.escapeHtmlChars("'" + ((char) ((Integer)member.constantValue()).intValue()) + "'"));
} else {
print(Util.escapeHtmlChars(member.constantValueExpression()));
}
codeEnd();
tdEnd();
}
一旦编译该类并用于覆盖“tools.jar”中的类,char 常量将作为字符而不是数字输出。
【问题讨论】:
-
你提早授予赏金太仓促了。有一种正确的方法可以做到这一点,它不会破解现有的 javadoc 工具
-
@Bohemian 需要详细说明吗?或者你只是想把那个遥不可及的吊起来?我根据我得到的答案(包括你的答案)以及从周五到今天我将离开我的电脑这一事实授予了赏金。这只是酸葡萄,因为你的答案没有得到赏金,还是你有一个实际的解决方案?
-
我对此进行了一些研究。 “正确”的做法是创建一个自定义类来处理标签,并通过命令行选项告诉 java 将其用于
@value标签。我将使用装饰器模式扩展基类 - 为charconst 执行自定义行为,但对于其他所有内容都遵循超类的 impl。破解基类是一个糟糕的解决方案,因为每次升级 JDK 都必须重新编辑基类。 -
是的,但这是否意味着我必须使用
@value标签?我不是。 -
如果你不使用
@value,我仍然会尝试找到一个使用扩展ConstantsSummaryWriterImpl 或类似的自定义类的解决方案。关键是,理想情况下,您需要一个可在 java 版本之间移植的解决方案。