Android中Enum(枚舉)的使用

來源:互聯網
上載者:User

標籤:特性   字串   枚舉類型   rri   成本   並且   content   一個   state   

簡介

enum 的全稱為 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中。

建立枚舉類型要使用 enum 關鍵字,隱含了所建立的類型都是 java.lang.Enum 類的子類(java.lang.Enum 是一個抽象類別)。枚舉類型符合通用模式 Class Enum<E extends Enum<E>>,而 E 表示枚舉類型的名稱。枚舉類型的每一個值都將映射到 protected Enum(String name, int ordinal) 建構函式中,在這裡,每個值的名稱都被轉換成一個字串,並且序數設定表示了此設定被建立的順序。

Android官網不建議使用enums,佔用記憶體多(Enums often require more than twice as much memory as static constants.)。

Android中當你的App啟動後系統會給App單獨分配一塊記憶體。App的DEX code、Heap以及運行時的記憶體配置都會在這塊記憶體中。

用法一:常量
package com.why.project.androidcnblogsdemo.enumtype;/** * Created by HaiyuKing * Used 儲存位置類型 */public enum TypeEnum {    CACHE,//緩衝儲存    FILE;//檔案儲存體}

 

package com.why.project.androidcnblogsdemo.activity;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import com.why.project.androidcnblogsdemo.R;import com.why.project.androidcnblogsdemo.enumtype.IConstants;import com.why.project.androidcnblogsdemo.enumtype.LanguageEnum;import com.why.project.androidcnblogsdemo.enumtype.TypeEnum;/** * Created by HaiyuKing * Used 枚舉類測試 */public class EnumActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_enum);        Log.d("EnumActivity","TypeEnum.CACHE=" + TypeEnum.CACHE);//TypeEnum.CACHE=CACHE
//對於無建構函式的枚舉類的一般使用 TypeEnum typeEnum = TypeEnum.CACHE; createPath(typeEnum); } private void createPath(TypeEnum createPath){ if(createPath == TypeEnum.CACHE){ Log.d("EnumActivity","建立緩衝目錄"); }else{ Log.d("EnumActivity","建立檔案目錄"); } }}
用法二:給 enum 自訂屬性和方法
package com.why.project.androidcnblogsdemo.enumtype;/** * 語種類型 */public enum LanguageEnum {    LANGUAGE("language"),//語言,用於SharedPreferences儲存的Key值    LANGUAGE_zh("zh"),//中文,用於SharedPreferences儲存的Value值    LANGUAGE_en("en"), //英語    LANGUAGE_es("es"),//西語    LANGUAGE_fr("fr"),//法語    LANGUAGE_ar("ar"),//阿語    LANGUAGE_ru("ru");//俄語    private String language;//自訂屬性    /**建構函式,枚舉類型只能為私人*/    LanguageEnum(String language) {        this.language = language;    }    //自訂方法    public String getLanguage(){        return language;    }}

 

package com.why.project.androidcnblogsdemo.activity;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import com.why.project.androidcnblogsdemo.R;import com.why.project.androidcnblogsdemo.enumtype.IConstants;import com.why.project.androidcnblogsdemo.enumtype.LanguageEnum;import com.why.project.androidcnblogsdemo.enumtype.TypeEnum;/** * Created by HaiyuKing * Used 枚舉類測試 */public class EnumActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_enum);        Log.d("EnumActivity","LanguageEnum.LANGUAGE_zh.getLanguage()=" + LanguageEnum.LANGUAGE_zh.getLanguage());//LanguageEnum.LANGUAGE_zh.getLanguage()=zh    }}
替代方案

介面變數

因為介面會自動將成員變數設定為靜態(static)、不可變的(final),這一點可以防止某些情況下錯誤地添加新的常量。這也使得代碼看起來更簡單和清晰。 同時,一個的簡單測試顯示,同樣的介面(位元組碼檔案)佔用的空間是209個位元組左右,而類(位元組碼檔案)佔用的空間是366個位元組左右。更少的位元組碼檔案意味著載入和維護的成本更低。此外,JVM 載入介面的時候,不需要擔心類提供的額外特徵(如重載、方法的動態綁定等),因此載入更快。

package com.why.project.androidcnblogsdemo.enumtype;/** * Created by HaiyuKing * Used */public interface IConstants {    //介面會自動將成員變數設定為靜態(static)、不可變的(final)    String LANGUAGE = "language";    String LANGUAGE_zh = "zh";    String LANGUAGE_en = "en";    String LANGUAGE_es = "es";    String LANGUAGE_fr = "fr";    String LANGUAGE_ar = "ar";    String LANGUAGE_ru = "ru";}

 

package com.why.project.androidcnblogsdemo.activity;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import com.why.project.androidcnblogsdemo.R;import com.why.project.androidcnblogsdemo.enumtype.IConstants;import com.why.project.androidcnblogsdemo.enumtype.LanguageEnum;import com.why.project.androidcnblogsdemo.enumtype.TypeEnum;/** * Created by HaiyuKing * Used 枚舉類測試 */public class EnumActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_enum);        Log.d("EnumActivity","IConstants.LANGUAGE_zh=" + IConstants.LANGUAGE_zh);//IConstants.LANGUAGE_zh=zh    }}

參考資料

java enum(枚舉)使用詳解 + 總結

Java enum的用法詳解

Android中是否推薦使用枚舉Enum

 

Android中Enum(枚舉)的使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.