在java 中我們常常會使用enum處理多種type,不過android 官方說這種寫法是非常expensive (可能是效率或memory其實我沒有多做研究)所以官方推薦我們利用另外一種寫法,使用annotation來處理
先讓我們看一下下面的程式碼
public class MyMode {
@IntDef({SUCCESS, NETWORK_FAIL, DATA_ERROR})
@Retention(RetentionPolicy.SOURCE)
public @interface APIMode {}
public static final int SUCCESS = 0;
public static final int NETWORK_FAIL = 1;
public static final int DATA_ERROR = 2;
private int mode = SUCCESS;
public int getMode(){
return mode;
}
public void setMode(@ APIMode int _mode){
mode = _mode;
}
}
我定義了一個MyMode 並且定義了
SUCCESS = 0
NETWORK_FAIL = 1
DATA_ERROR = 2
接著我利用了
@IntDef({SUCCESS, NETWORK_FAIL, DATA_ERROR})
@Retention(RetentionPolicy.SOURCE)
public @interface APIMode {}
定義了一個自定義的annotation APIMode 而這個annotation只有在setMode的時候會被用到,這個annotation有什麼功用呢?
主要是在寫程式的時候,我們常常會這樣寫 mymode.setMode(1);
這樣寫程式是可以work的,但是其實很不好讀,對於其他的developer他們還必須進來查看才知道原來setMode(1)是在說 NETWORK_FAIL ,
所以我們該如何避免developer為了方便,而使用這種寫法呢?
我們使用了剛剛的annotation時,如果有人寫同樣的code,我們就可以在android studio上面看到如下圖的提示
而且數字下方會有紅字顯示,這樣developer就比較會去修改它,可惜的是,這種寫法似乎沒有辦法強制build不過(或許使用lint就行)
最後,我覺得這種寫法的確是蠻不錯的,but對於實際在使用上面,感覺大部份的人還是會為了方便而使用enum,不過官方都這麼推薦了,還是可以考慮用看看囉~
沒有留言:
張貼留言