元注解
导航 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
,则注解可以用于任何程序元素。