最近想擼一個權(quán)限機制的APT項目症杏,于是重新復(fù)習(xí)了注解的內(nèi)容。
先簡單看看Butterknife中對View的綁定的注解@BindView瑞信,源碼如下
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface BindView {
int value();
}
其中對注解進行配置的是元注解厉颤,本文也將著重介紹這兩個最常使用的元注解。
@Retention凡简、@Target
@Retention
定義了該Annotation被保留的時間長短逼友。參數(shù)為 RetentionPolicy
public enum RetentionPolicy {
SOURCE, //只在源碼中存在,不存在編譯后的.class 文件
CLASS, //默認配置秤涩,存在于源碼帜乞,且編譯后也存在.class中,但信息不會被加載到JVM虛擬機中
RUNTIME; //源碼、class文件溉仑、虛擬機中都存在
private RetentionPolicy() {
}
}
類型 | 源碼中存在 | CLASS文件中存在 | 是否加載到JVM虛擬機(Runtime) |
---|---|---|---|
SOURCE | 是 | 否 | 否 |
CLASS | 是 | 是 | 否 |
RUNTIME | 是 | 是 | 是 |
@Target
Target說明了Annotation所修飾的對象范圍挖函,參數(shù)為 ElementType
public enum ElementType {
TYPE, //用于描述類、接口(包括注解類型) 或enum聲明
FIELD, //用于描述屬性
METHOD, //用于描述方法
PARAMETER, //用于描述參數(shù)
CONSTRUCTOR, //用于描述構(gòu)造函數(shù)
LOCAL_VARIABLE, //用于描述局部變量
ANNOTATION_TYPE, //用于描述注解
PACKAGE, //用于包
TYPE_PARAMETER, //描述類型,如泛型怨喘,String類型
TYPE_USE; //描述這個注解可以用在類型的聲明式前
private ElementType() {
}
}
本文還未介紹的元注解還有
- @Document:說明該注解將被包含在javadoc中
- @Inherited:說明子類可以繼承父類中的該注解