今天学习十分钟——Java元注解@Retention、@Target

最近想撸一个权限机制的APT项目,于是重新复习了注解的内容。

先简单看看Butterknife中对View的绑定的注解@BindView,源码如下

@Retention(RetentionPolicy.CLASS)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface BindView {
    int value();
}

其中对注解进行配置的是元注解,本文也将着重介绍这两个最常使用的元注解。
@Retention、@Target


@Retention

定义了该Annotation被保留的时间长短。参数为 RetentionPolicy

public enum RetentionPolicy {
    SOURCE,     //只在源码中存在,不存在编译后的.class 文件      
    CLASS,      //默认配置,存在于源码,且编译后也存在.class中,但信息不会被加载到JVM虚拟机中
    RUNTIME;    //源码、class文件、虚拟机中都存在

    private RetentionPolicy() {
    }
}
类型 源码中存在 CLASS文件中存在 是否加载到JVM虚拟机(Runtime)
SOURCE
CLASS
RUNTIME

@Target

Target说明了Annotation所修饰的对象范围,参数为 ElementType

public enum ElementType {
    TYPE,                   //用于描述类、接口(包括注解类型) 或enum声明
    FIELD,                  //用于描述属性
    METHOD,                 //用于描述方法
    PARAMETER,              //用于描述参数
    CONSTRUCTOR,            //用于描述构造函数
    LOCAL_VARIABLE,         //用于描述局部变量
    ANNOTATION_TYPE,        //用于描述注解
    PACKAGE,                //用于包
    TYPE_PARAMETER,         //描述类型,如泛型,String类型
    TYPE_USE;               //描述这个注解可以用在类型的声明式前

    private ElementType() {
    }
}

本文还未介绍的元注解还有

  • @Document:说明该注解将被包含在javadoc中
  • @Inherited:说明子类可以继承父类中的该注解

你可能感兴趣的:(今天学习十分钟——Java元注解@Retention、@Target)