Android開發中用於替代Enum的@IntDef的使用
在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'
相關文章
- 關於Android中使用Enum的一點總結Android
- android開發中用到的px、dp、spAndroid
- android開發過程中用到的一些開源框架Android框架
- 開發中用到的一個快速排序法排序
- Rust中用元組模式匹配替代if-elseRust模式
- Ubuntu 中用 delphi 開發 apacheUbuntuApache
- 關於setRouteLeaveHook無法使用時的替代方案registerTransitionHookHook
- 在Java中用規則引擎模式替代ifelse - VitaliJava模式
- 我們自己開發的程式碼託管服務,用於內部替代 Github,免費開源給大家使用Github
- android 基於dex的外掛化開發Android
- 關於Java中列舉Enum的深入剖析Java
- 關於iOS開發中copy的使用iOS
- 求救--對於使用ssh開發的迷茫
- Android開發之 .9PNG 的使用Android
- 第一篇:儘量多的以 const/enum/inline 替代 #defineinline
- Android 狀態列關於開發的幾件事Android
- 10個關於Android開發的實用教程Android
- 使用 Airflow 替代你的 crontabAI
- MangoDB:MongoDB的開源替代MongoDB
- 開發中用到的一些第三方
- 為什麼使用列舉作為配置項(enum as configuration)是反開發模式的模式
- Android關於Typedarray的使用Android
- C語言中關鍵字typedef、enum的使用C語言
- Python Enum 使用的幾點注意事項Python
- JAVA 基礎 - ENUM 列舉的簡單使用Java
- 基於 MVP 的 Android 元件化開發框架實踐MVPAndroid元件化框架
- 基於 NanoHttpd 的 Android 視訊伺服器開發NaNhttpdAndroid伺服器
- 關於Android開發的40條優化建議Android優化
- C/C++:enum的理解 / enum與int的相互轉換C++
- Android開發教程-使用DataBinding(六)RecyclerViewAdapter中的使用AndroidViewAPT
- LastPass 的開源替代品AST
- 使用Kotlin優雅的開發Android應用KotlinAndroid
- 關於 top 工具的 6 個替代方案
- CC:基於匯流排的android元件化開發框架Android元件化框架
- Java列舉型別enum的詳解及使用Java型別
- Android開發教程 - 使用Data Binding(四)在Fragment中的使用AndroidFragment
- Android開發教程 - 使用Data Binding(三)在Activity中的使用Android
- 在 Python 中使用 enumPython