跳转到内容

元注解

75% developed
来自维基教科书,开放世界开放书籍

导航 Javadoc & 注解 主题: v  d  e )


java.lang.annotation 包中,有五种称为 元注解 的注解类型。这些注解类型用于注解其他注解类型。

Documented

[编辑 | 编辑源代码]

如果一个成员被标记为 @Documented 的类型注解,那么该成员将被记录为注解该类型。

Computer code 代码清单 1.1:@Documented 的使用
@interface Secret { }

@Documented
@interface NotSecret { }

@Secret
@NotSecret
public class Example {
}

Example 类的文档中,例如 JavaDoc,Example 将显示为被 @NotSecret 注解,但不会被 @Secret 注解。

Clipboard

待办事项
添加 Javadoc 的渲染。


Inherited

[编辑 | 编辑源代码]

顾名思义,@Inherited 注解类型会被注解类型的子类继承。

Computer code 代码清单 1.2:@Inherited 的使用
@Inherited
@interface ForEveryone { }

@interface JustForMe { }

@ForEveryone
@JustForMe
class Superclass { }

class Subclass extends Superclass { }

在这个例子中,Superclass 被显式地标记了 @ForEveryone@JustForMeSubclass 没有被显式地标记任何一个;但是,它继承了 @ForEveryone,因为后者被 @Inherited 注解。@JustForMe 没有被注解,因此它不会被 Subclass 继承。

Repeatable

[编辑 | 编辑源代码]

@Repeatable 注解类型是可重复的——即可以多次指定在同一个类上。这个元注解是在 Java 8 中添加的。

Retention

[编辑 | 编辑源代码]

不同的注解类型有不同的用途。有些是用于编译器的;而有些则旨在动态地反映在运行时。编译器注解没有理由在运行时可用,因此 @Retention 元注解指定了注解类型应该保留多长时间。value 属性是 java.lang.annotation.RetentionPolicy 枚举常量之一。这些可能的值,从最短的保留时间到最长的保留时间,如下所示

RetentionPolicy.SOURCE
注解将不会被包含在类文件中。这对于仅用于编译器的注解很有用。
RetentionPolicy.CLASS
注解将被包含在类文件中,但不能被反射地读取。
RetentionPolicy.RUNTIME
注解可以在运行时被反射。

如果没有指定 @Retention 策略,它将默认为 RetentionPolicy.CLASS

@Target 元注解决定什么可以被注解标记。value 属性是 java.lang.annotation.ElementType 枚举常量之一或多个。这些常量是 ElementType.ANNOTATION_TYPECONSTRUCTORFIELDLOCAL_VARIABLEMETHODPACKAGEPARAMETERTYPE

如果没有指定 @Target,则注解可以用于任何程序元素。


Clipboard

待办事项
添加一些与 变量 中的练习类似的练习。

华夏公益教科书