元注解
| 导航 Javadoc & 注解 主题: |
在 java.lang.annotation 包中,有五种称为 元注解 的注解类型。这些注解类型用于注解其他注解类型。
如果一个成员被标记为 @Documented 的类型注解,那么该成员将被记录为注解该类型。
代码清单 1.1:@Documented 的使用
@interface Secret { }
@Documented
@interface NotSecret { }
@Secret
@NotSecret
public class Example {
}
|
在 Example 类的文档中,例如 JavaDoc,Example 将显示为被 @NotSecret 注解,但不会被 @Secret 注解。
顾名思义,@Inherited 注解类型会被注解类型的子类继承。
代码清单 1.2:@Inherited 的使用
@Inherited
@interface ForEveryone { }
@interface JustForMe { }
@ForEveryone
@JustForMe
class Superclass { }
class Subclass extends Superclass { }
|
在这个例子中,Superclass 被显式地标记了 @ForEveryone 和 @JustForMe。Subclass 没有被显式地标记任何一个;但是,它继承了 @ForEveryone,因为后者被 @Inherited 注解。@JustForMe 没有被注解,因此它不会被 Subclass 继承。
| 本节是一个存根。 你可以通过 扩展它 来帮助。 |
@Repeatable 注解类型是可重复的——即可以多次指定在同一个类上。这个元注解是在 Java 8 中添加的。
不同的注解类型有不同的用途。有些是用于编译器的;而有些则旨在动态地反映在运行时。编译器注解没有理由在运行时可用,因此 @Retention 元注解指定了注解类型应该保留多长时间。value 属性是 java.lang.annotation.RetentionPolicy 枚举常量之一。这些可能的值,从最短的保留时间到最长的保留时间,如下所示
RetentionPolicy.SOURCE- 注解将不会被包含在类文件中。这对于仅用于编译器的注解很有用。
RetentionPolicy.CLASS- 注解将被包含在类文件中,但不能被反射地读取。
RetentionPolicy.RUNTIME- 注解可以在运行时被反射。
如果没有指定 @Retention 策略,它将默认为 RetentionPolicy.CLASS。
@Target 元注解决定什么可以被注解标记。value 属性是 java.lang.annotation.ElementType 枚举常量之一或多个。这些常量是 ElementType.ANNOTATION_TYPE、CONSTRUCTOR、FIELD、LOCAL_VARIABLE、METHOD、PACKAGE、PARAMETER 和 TYPE。
如果没有指定 @Target,则注解可以用于任何程序元素。
