javadoc -Xdoclint 一直标记我的(可选的)匿名 class 因为它显然没有评论

javadoc -Xdoclint keeps flagging my (optional) anonymous class for not having a comment when it clearly does

我正在使用 javadoc 来记录我的 public 枚举。我正在使用以下命令编译以下所有示例:

javac   -Xdoclint:all     LetsLearnJavadocXdoclint.java

如果我的枚举是这样的,它会生成一个没有任何警告的 .class 文件。

/** Comment LetsLearnJavadocXdoclint. */
public enum LetsLearnJavadocXdoclint
{
   /** Comment A. */A;
}

但是如果我的枚举是这样的:

/** Comment LetsLearnJavadocXdoclint. */
public enum LetsLearnJavadocXdoclint
{
   /** Comment A. */A{};
}

.....我得到以下错误.....

LetsLearnJavadocXdoclint.java:4: warning: no comment
   /** Comment A. */A{};
                    ^
1 warning

考虑到我需要在其他地方发表评论,所以我决定在每个可能的位置发表评论......

/** Comment LetsLearnJavadocXdoclint. */
public enum LetsLearnJavadocXdoclint
{
   /** Comment A. */A/** Comment A. */{/** Comment A. */}/** Comment A. */;
}

.....无济于事.....

LetsLearnJavadocXdoclint.java:4: warning: no comment
   /** Comment A. */A/** Comment A. */{/** Comment A. */}/** Comment A. */;
                    ^
1 warning

为了绝对肯定,我走到了逻辑的极端。

/** At this. */
public
/** point, I. */
enum
/** am beginning. */
LetsLearnJavadocXdoclint
/** to think. */
{
/** that I. */
   A
   /** am not. */
   {
   /** the one. */
   }
/** who is. */
   ,
/** at fault. */
   ;
/** here. */
}
/** Next question. How do I report a bug to Java? */

.....还有......

$ javac -Xdoclint:all LetsLearnJavadocXdoclint.java
LetsLearnJavadocXdoclint.java:10: warning: no comment
   A
   ^
1 warning

我是不是漏掉了什么?

为了更好地解释我的意图,我的实际目标是让这个枚举使用单个方法实现一个接口,然后让我的枚举中的每个枚举值提供它们自己独特的方法实现。我一直在尝试使用 javadoc 对其进行记录,但无济于事。这就是我想出这个最小示例的方式。

如果我不得不猜测,它可能与匿名 classes 有关。我认为我包含的那些大括号正在创建某种形式的匿名 class,并且它试图同时评论匿名 class 和枚举值。我猜到这是因为下面的例子。

如果我尝试这样做......

/** Comment LetsLearnJavadocXdoclint. */
public enum LetsLearnJavadocXdoclint
{
   A{};
}

.....我明白了.....

LetsLearnJavadocXdoclint.java:4: warning: no comment
   A{};
   ^
LetsLearnJavadocXdoclint.java:4: warning: no comment
   A{};
   ^
2 warnings

2 条警告

.....这让我立即想到匿名 classes.

显然,我不确定,但为什么它会有 2 WARNINGS 除非是因为有枚举 class 和匿名的 class 它期望文档来自?

最后,这是我的信息。

$ javac -version
javac 1.8.0_281

$ java -version
java version "1.8.0_281"
Java(TM) SE Runtime Environment (build 1.8.0_281-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)

枚举常量的可选 class 主体隐式定义匿名 class 声明(请参阅 Java Language Specification)。 Javadoc 工具不直接记录匿名 classes —— 也就是说,它们的声明和文档注释被忽略。以下匿名 class 示例会产生相同的两个警告:

public class MyClass {

  private Runnable cleanUpOperation = new Runnable() {

    @Override
    public void run() {

    }
  };

}

一个针对 cleanUpOperation 字段缺少注释的警告,一个针对 Runnable 的匿名子 class 缺少注释的警告。 无法向匿名 class 添加评论。 Oracle 建议在其外部 class 或任何其他密切相关的 class 的文档注释中记录匿名 class(有关详细信息,请参阅 here)。因此,在您的情况下,这将是您的枚举 class 或枚举常量的文档注释。

-Xdoclint:all 显示缺少 public、protected、package 和 private 成员的 javadoc 注释的警告。这也包括匿名 classes.

要消除警告,您可以使用 -Xdoclint:all,-missing/private 告诉 doclint 忽略私人成员缺少的注释。执行 javac -X 以获得有关如何为您的目的配置 doclint 的帮助。