1、概念

元注解就是修饰注解的注解

2、四个常用元注解

@Retention

概念:指定注解的生命周期,可以保留到哪个阶段,分为三种

  • RetentionPolicy.SOURCE 编译器直接丢弃这种策略的注释
  • RetentionPolicy.CLASS 编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。 这是默认值
  • RetentionPolicy.RUNTIME 编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注释. 程序可以通过反射获取该注释
  1. @Retention(RetentionPolicy.RUNTIME) //最常用

@Target

概念:用于修饰 Annotation 定义, 用于指定被修饰的 Annotation 能用于修饰哪些程序元素,如TYPE、FIELD、METHOD等

名称 说明
CONSTRUCTOR 用于构造方法
FIELD 用于成员变量(包括枚举常量)
LOCAL_VARIABLE 用于局部变量
METHOD 用于方法
PACKAGE 用于包
PARAMETER 用于类型参数(JDK 1.8新增)
TYPE 用于类、接口(包括注解类型)或 enum 声明
  1. @Target({ ElementType.METHOD })
  2. public @interface MyTarget {
  3. }
  4. class Test {
  5. @MyTarget
  6. String name;
  7. }
  8. //提示此位置不允许使用注解 @MyDocumented,@MyTarget 不能修饰成员变量,只能修饰方法

@Documented

概念:用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档

@Inherited

概念:描述注解是否被子类继承

3、举例

  1. @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, MODULE})
  2. @Retention(RetentionPolicy.RUNTIME)
  3. public @interface MyAnnotation {
  4. // String[] value();
  5. // 也可以定义带默认值的
  6. String[] value() default {"hehe"};
  7. }