gpt4 book ai didi

java - char常量显示在Javadoc "Constant Field Values"页面

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:23:25 24 4
gpt4 key购买 nike

有没有办法让生成的“常量字段值”页面使用可读字符而不是整数作为 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 本身来实现这一点。

  1. 获取 javadoc 工具的源代码(别担心,我们只需要一个文件即可调整 ;-))
    我从这里 JDK 7 langtools source 获取了文件 langtools-ce654f4ecfd8.tar.gz
  2. 提取文件 ConstantsSummaryWriterImpl.java
  3. 修改方法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);
    }
    ...
  4. 编译修改后的文件
    javac -cp ${JAVA_HOME}/lib/tools.jar -d 。 ConstantsSummaryWriterImpl.java

  5. 运行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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com