当我注意到@Target
在包中调用的注释时,我正在浏览JDK 7的文档java.lang.annotation
.该类的标题是
@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
public @interface Target
Run Code Online (Sandbox Code Playgroud)
现在,它@Target
被用作自身的注释.这怎么可能?@Target
在声明之前,它在标题中使用.我用我编写的注释尝试了这个,它也运行良好.谁能解释一下这里发生了什么?
JLS 在第 9.6 节“注释类型”中特别预见到了这一点中特别预见到了这一点:
\n\n\n\n\n如果注释类型声明上的注释
\na
\n ( \xc2\xa79.7 )\n 对应于注释类型\nT
,并且具有对应于\n 的T
(元)注释,则必须具有一个元素\n其值为,或\n 其值为m
java.lang.annotation.Target
m
java.lang.annotation.ElementType.ANNOTATION_TYPE
java.lang.annotation.ElementType.TYPE
,或\n 发生编译时错误。
第 9.6 节或 9.7 节的其他部分没有说明使用对所声明的注释的引用来注释注释声明是非法的。
\n