1、概念
元注解就是修饰注解的注解
2、四个常用元注解
@Retention
概念:指定注解的生命周期,可以保留到哪个阶段,分为三种
- RetentionPolicy.SOURCE 编译器直接丢弃这种策略的注释
- RetentionPolicy.CLASS 编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。 这是默认值
- RetentionPolicy.RUNTIME 编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注释. 程序可以通过反射获取该注释
@Retention(RetentionPolicy.RUNTIME) //最常用
@Target
概念:用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于修饰哪些程序元素,如TYPE、FIELD、METHOD等
名称 | 说明 |
---|---|
CONSTRUCTOR | 用于构造方法 |
FIELD | 用于成员变量(包括枚举常量) |
LOCAL_VARIABLE | 用于局部变量 |
METHOD | 用于方法 |
PACKAGE | 用于包 |
PARAMETER | 用于类型参数(JDK 1.8新增) |
TYPE | 用于类、接口(包括注解类型)或 enum 声明 |
@Target({ ElementType.METHOD })
public @interface MyTarget {
}
class Test {
@MyTarget
String name;
}
//提示此位置不允许使用注解 @MyDocumented,@MyTarget 不能修饰成员变量,只能修饰方法
@Documented
概念:用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档
@Inherited
概念:描述注解是否被子类继承
3、举例
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
// String[] value();
// 也可以定义带默认值的
String[] value() default {"hehe"};
}