javadoc-Xdoclint一直在标记我的(可选)匿名类,因为它显然没有注释

javadoc-Xdoclint一直在标记我的(可选)匿名类,因为它显然没有注释,java,warnings,javadoc,anonymous-class,Java,Warnings,Javadoc,Anonymous Class,我正在使用javadoc来记录我的公共枚举。我正在使用以下命令编译以下所有示例: javac -Xdoclint:all LetsLearnJavadocXdoclint.java 如果我的枚举是这样的,它将生成一个没有任何警告的.class文件 /** Comment LetsLearnJavadocXdoclint. */ public enum LetsLearnJavadocXdoclint { /** Comment A. */A; } 但如果我的枚举是这样的:

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

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来记录它,但是没有用。这就是我提出这个最小的例子的原因

如果让我猜的话,它可能与匿名类有关。我认为我包含的花括号正在创建某种形式的匿名类,它试图对匿名类和枚举值进行注释。我猜这是因为下面的例子

如果我尝试这样做

/** Comment LetsLearnJavadocXdoclint. */
public enum LetsLearnJavadocXdoclint
{
   A{};
}
LetsLearnJavadocXdoclint.java:4: warning: no comment
   A{};
   ^
LetsLearnJavadocXdoclint.java:4: warning: no comment
   A{};
   ^
2 warnings
……我明白了

/** Comment LetsLearnJavadocXdoclint. */
public enum LetsLearnJavadocXdoclint
{
   A{};
}
LetsLearnJavadocXdoclint.java:4: warning: no comment
   A{};
   ^
LetsLearnJavadocXdoclint.java:4: warning: no comment
   A{};
   ^
2 warnings
2警告 …这立刻让我想到了匿名类

显然,我不确定,但为什么它会有2警告,除非是因为存在枚举类,以及它希望从中获取文档的匿名类

最后,这是我的信息

$ 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)

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

public class MyClass {

  private Runnable cleanUpOperation = new Runnable() {

    @Override
    public void run() {

    }
  };
}

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

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


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

此外,比我声誉更高(>1500)的人是否可以在这个问题上添加Xdoclint标记?我觉得这可能有助于其他人在与我类似的情况下更快地找到他们问题的答案。如果无法在匿名类上添加评论,那么该工具不应该对此抱怨,不?谢谢你的回答,它得到了很好的支持和研究。我还找到了查找文档的新地方,因此感谢您(我只知道基本文档或教程)。我想我的最后一个问题是——这算不算javadoc的bug/缺陷?@MA我刚刚向Oracle/Java提交了一个bug。如果有人想跟进,这里是缺陷编号(9069884)。你可以在这里插入这个数字——它目前不可用,但应该在系统生成错误报告时提供。如果有任何变化,我将删除此评论并在此处更新。@MA这是新的错误号-JDK-8265253,但看起来他们立即表示这不是问题:(不过我还是要反驳一下,看看能不能让他们改变主意。@MA他们正在重新考虑!他们还没有接受这是一个需要修复的bug,所以我还在努力。但这是一个进步!