7

我在浏览 JDK 7 的文档时注意到@Targetpackage 中调用了一个注解java.lang.annotation。该类的标题是

@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
public @interface Target

现在,@Target用作自身的注释。这怎么可能?@Target甚至在声明之前就在标头中使用。我用我写的注释尝试了这个,它也很有效。谁能解释这里发生了什么?

4

1 回答 1

3

JLS 在第 9.6 节注释类型中特别预见到了这一点:

如果注解类型声明上的注解a第 9.7 节)对应于注解类型 T,并且T具有对应于 的(元)注解mjava.lang.annotation.Targetm必须具有值为java.lang.annotation.ElementType.ANNOTATION_TYPE的元素或值为 的元素java.lang.annotation.ElementType.TYPE,或 compile发生时间错误。

9.6 或 9.7 节的其他部分没有说明使用对正在声明的注释的引用来注释注释声明是非法的。

于 2013-07-13T14:41:40.410 回答