Java注释 - 标识符或类型名称

Mis*_*hax 8 java annotations language-lawyer

Java语言规范指出,一个正常的注释的格式为

NormalAnnotation:
  @ TypeName(ElementValuePairs opt)

单元素注释的格式为:

SingleElementAnnotation:
  @ Identifier(ElementValue)

我不明白,为什么这种不一致,为什么是正常的注释TypeName和单个元素注释Identifier?我认为引用Identifier可能是规范中的错误,因为Identifier不合格,javac接受符合条件的AnnotationDeclarations,用于普通注释和单个元素注释.

Mis*_*hax 7

引用Identifier是规范中的错误,因为标识符不能被限定(您可以写@java.lang.SuppressWarnings("unchecked")java.lang.SuppressWarnings不是合法标识符).对于普通注释和单个元素注释,Javac接受限定的AnnotationDeclarations.这个错误似乎是最近出现的; 旧版本的JLS没有这个问题.