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

标签 java constants javadoc

有没有办法让生成的“常量字段值”页面使用可读字符而不是整数作为 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/

相关文章:

Java "new File()"不创建文件

java - 将 RadioGroupFieldEditor 放置在 FormLayout 中时出现 ClassCastException

c# - 如何在 C# 中处理 C++ 定义?

JDK 8 : Invalid "self-closing element not allowed" 中的 Javadoc

javadoc 子集/java 库组织

java - 在 writeObject(null) 之后期望是 0 个字节,但我发现是 5 个字节,这是怎么回事?

cuda - 如何找到 CUDA 的 epsilon、min 和 max 常量?

c++ - 如何在编译时检查内联函数的参数是否已知?

java - 缺少 Eclipse 中方法的基本 JavaDoc

java - 根据标签的变量评估其主体的自定义标签