天天看點

注解相關

通過注解限定參數類型
首先了解注解的概念。
注解:給程式中的元素(類,方法,字段)添加注釋。
元注解:注解的注解稱為元注解,來看下常見的元注解有@Retention
訓示注解内容要保留多久。預設為 RetentionPolicy.CLASS。
RetentionPolicy 是枚舉類,定義了三種保留政策。SOURCE
僅在源碼階段保留,編譯時會丢棄注解。
CLASS
Class檔案中,編譯器将把注解記錄在類檔案中,但在運作時虛拟機 不需要保留注解。
RUNTIME
運作時,編譯器将把注解記錄在類檔案中,在運作時虛拟機将保留注解,是以可以反射性地讀取。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    /**
     *  傳回保留政策
     */
    RetentionPolicy value();
}

@Target
注解目标類型,訓示注解所适用的程式元素的類型。
常用的程式元素類型(ElementType)有:TYPE
類、接口(包括注釋類型)或枚舉聲明
FIELD
字段(包括枚舉常量)
METHOD
方法
PARAMETER
參數
CONSTRUCTOR
構造方法
ANNOTATION_TYPE
注釋類型
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
    /**
     * 傳回可應用注解的元素類型的數組
     */
    ElementType[] value();
}

當需要定義固定的幾種狀态值時,可以使用枚舉或者注解,下面使用注解來表示加載資料的狀态。使用注解@IntDef限定其值必須為顯式聲明常量之一。
/**
* 通過注解限定類型
 * LOADING 加載中
 * CONTENT 加載完成,顯示内容
 * EMPTY 加載完成,資料為空
 * ERROR 加載出錯
 */
@IntDef(value = {StateType.LOADING, StateType.CONTENT, StateType.EMPTY, StateType.ERROR})
@Retention(RetentionPolicy.SOURCE)
public @interface StateType {
    int LOADING = 1;
    int CONTENT = 2;
    int EMPTY = 3;
    int ERROR = 4;
}

定義好值之後,就可以使用注解限定參數類型,這樣可以避免傳入限定以外的值。private int state = StateType.CONTENT;
private void setState(@StateType int state) {
    this.state = state;
}