注解 Annotation

111 阅读1分钟

注解的注解称为元注解。

public enum RetentionPolicy {
    /**
      *    若 Annotation 的类型为 SOURCE,则意味着:Annotation 仅存在于编译器处理期
      *    间,编译器处理完之后,该 Annotation 就没用了。 例如," @Override" 标志就是
      *    一个 Annotation。当它修饰一个方法的时候,就意味着该方法覆盖父类的方法;并且在
      *   编译期间会进行语法检查!编译器处理完后,"@Override" 就没有任何作用了。
      *   APT,编译时生成辅助类
      */
    SOURCE,

    /**
     *    若 Annotation 的类型为 CLASS,则意味着:编译器将 Annotation 存储于类对应
     *     的 .class 文件中,它是 Annotation 的默认行为。
     *    字节码增强 热修复
     */
    CLASS,

    /**
     *    若 Annotation 的类型为 RUNTIME,则意味着:编译器将 Annotation 存储于 
     *    class 文件中,并且可由JVM读入。
     *    反射
     */
    RUNTIME
}
    public enum ElementType {     
        TYPE,               /* 类、接口(包括注释类型)或枚举声明  */     
        FIELD,              /* 字段声明(包括枚举常量)  */     
        METHOD,             /* 方法声明  */     
        PARAMETER,          /* 参数声明  */     
        CONSTRUCTOR,        /* 构造方法声明  */     
        LOCAL_VARIABLE,     /* 局部变量声明  */     
        ANNOTATION_TYPE,    /* 注释类型声明  */     
        PACKAGE             /* 包声明  */ 
    }

属性

如果一个注解内仅仅只有一个名字为 value 的属性时,应用这个注解时可以直接把属性值填写到括号内。

public @interface Check { 
    String value() default "1";
}

上面代码中,Check 这个注解只有 value 这个属性,所以可以这样应用。

@Check("hi") 
int a;

这和下面的效果是一样的:

@Check(value="hi") 
int a;