Android開發中用於替代Enum的@IntDef的使用

codingismylife發表於2015-11-07

在Android的官方文件的記憶體管理中http://developer.android.com/training/articles/memory.html#Overhead提到由於Enum通常需要兩倍以上的儲存空間,因此應當儘量避免Enum的使用。對此,Google官方推出了IntDef作為對Enum的替代。以下通過一個具體的例子來說明其用法:

例如我們有如下的一組Enum:

public enum Color{
RED, BLUE, YELLOW, GREEN, PURPLE, WHITE, BLACK
}

現在我們要做的是找出其替代方法,首先我們要做的是定義常量:

public static final int RED = 0;
public static final int BLUE = 1;
public static final int YELLOW = 2;
public static final int GREEN = 3;
public static final int PURPLE = 4;
public static final int WHITE = 5;
public static final int BLACK = 6;

在常量定義了之後,事實上我們已經可以使之作為對Enum的替代了,但是在實際的開發過程中寫的程式碼如果換成了其他的變數名,編譯器並不能夠報錯。基於此背景,IntDef應運而生。在定義了常量之後,我們首先需要用一個@IntDef({})將其全部變數包含,其次需要一個Retention宣告其保留級別,最後定義其介面名稱,具體程式碼為:

@IntDef({RED, BLUE, YELLOW, GREEN, PURPLE, WHITE, BLACK})
@Retention(RetentionPolicy.SOURCE)
public @interface Color{};

在使用的時候,例如我們有一個變數名稱為:

int color;

與此同時有一個函式:

void setColor(@Color int COLOR){
color = COLOR;
}

在呼叫此函式的時候,引數名稱如果不是IntDef中的變數名稱的時候,例如setColor(2),Android Studio中就會提示錯誤(雖然編譯仍然會通過)。

在使用的時候需要在gradle中加入:

compile 'com.android.support:support-annotations:23.0.1'



相關文章