今天學習十分鐘——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:說明子類可以繼承父類中的該注解
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容