微分享-工作中常用到的java enum實現形式

平時學習很少接觸enum,很多時候會使用常量代替。在工作時可能會或多或少用到enum方法,下面是幾個工作中常用的方法,基本上能滿足絕大多數使用場景

簡單的enum

public enum Color {  
  RED, GREEN, BLANK, YELLOW  
} 

添加參數并使用switch

public enum AreaChangeStatus {
    UNCRAWLED(0),
    SUBMIT_TO_CRAWL(1);

    public int value;

    // 參數使用通過構造方法傳入進來的
    AreaChangeStatus(int i) {
        this.value = i;
    }

    // 使用switch獲得相應的enum對象
    public static AreaChangeStatus of(int value) {
        switch (value) {
            case 0:
                return UNCRAWLED;
            case 1:
                return SUBMIT_TO_CRAWL;
            default:
                return UNCRAWLED;
        }
    }
}

enum帶參數需要在創建一個帶參數的改造方法,如果類型固定可以使用switch實現通過對應的參數獲取其對象。如果覺得使用switch不夠智能,每次添加新的enum的使用都用在switch中添加一個case,那么可以使用for循環,見下面的代碼:

public enum AreaChangeStatus {
    UNCRAWLED(0),
    SUBMIT_TO_CRAWL(1);

    public int value;

    AreaChangeStatus(int i) {
        this.value = i;
    }

    // 使用for循環
    public static AreaChangeStatus of(int value) {
        for(AreaChangeStatus area : AreaChangeStatus.values()){
            if(area.value == value){
                return area;
            }
        }
    }
}

這個寫只需要在上面添加enum就可以了,不需要在of方法中修改代碼。

多個參數參數使用普通方式

public enum AlgoVersion {
    V1(1, "V1", "冒泡排序算法"),
    V2(2, "V2", "快速排序算法"),
    ;

    private int code;
    private String version;
    private String desc;

    AlgoVersion(int code, String version, String desc) {
        this.code = code;
        this.version = version;
        this.desc = desc;
    }

    public int getCode() {
        return code;
    }

    public String getVersion() {
        return version;
    }

    public String getDesc() {
        return desc;
    }

    public static AlgoVersion of(int code) {
        if (code == 1) {
            return V1;
        } else if (code == 2) {
            return V2;
        } else {
            return V1;
        }
    }

    public static AlgoVersion of(String version) {
        if ("V1".equalsIgnoreCase(version)) {
            return V1;
        } else if ("V2".equalsIgnoreCase(version)) {
            return V2;
        } else {
            return V1;
        }
    }
}

enum方法不是在實際開發中常用的方法,雖然他功能強大,但是有一點學習門檻,并且好多場景使用常量就已經足夠了。只要掌握了上面的4個例子,基本上項目中需要用到enum的地方,都可以輕松搞定。

參考:
IBM Enum WIKI

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 對象的創建與銷毀 Item 1: 使用static工廠方法,而不是構造函數創建對象:僅僅是創建對象的方法,并非Fa...
    孫小磊閱讀 2,031評論 0 3
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,593評論 25 708
  • title: "Swift 中枚舉高級用法及實踐"date: 2015-11-20tags: [APPVENTUR...
    guoshengboy閱讀 2,624評論 0 2
  • 走著走著 不知道該說些什么 不知道該問些什么 風都有些厭倦我 你在哪 你會在哪 若想見 我會站在高處
    芬悅靈閱讀 169評論 0 1