有没有办法让生成的“常量字段值”页面使用可读字符而不是整数作为 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 的回答,我设法将 1.6 版源代码用于我找到的 ConstantsSummaryWriterImpl
here , 修改 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
本身来实现这一点。
- 获取 javadoc 工具的源代码(别担心,我们只需要一个文件即可调整 ;-))
我从这里 JDK 7 langtools source 获取了文件langtools-ce654f4ecfd8.tar.gz
- 提取文件
ConstantsSummaryWriterImpl.java
修改方法
getValue(FieldDoc member)
... private Content getValue(FieldDoc member) { Content valueContent; if ("char".equals(member.type().toString())) { valueContent = new StringContent("'" + (char) ((Integer) member.constantValue()).intValue() + "'" ); } else { valueContent = new StringContent(member.constantValueExpression()); } Content code = HtmlTree.CODE(valueContent); return HtmlTree.TD(HtmlStyle.colLast, code); } ...
编译修改后的文件
javac -cp ${JAVA_HOME}/lib/tools.jar -d 。 ConstantsSummaryWriterImpl.java
运行javadoc
javadoc -J-Xbootclasspath/p:.;${JAVA_HOME}/lib/tools.jar -d api/Scratch.java
文件Scratch.java
public class Scratch {
public static final char YES = 'Y';
public static final char NO = 'N';
public static final char ERROR = 'E';
}
关于java - char常量显示在Javadoc "Constant Field Values"页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25634384/