Java中枚舉的使用

  Java中有不少時候都用到了枚舉,可是以前都沒有去好好理解這個類,因此準備寫一下關於枚舉類的用法以及使用場景。java

  首先,介紹一下枚舉的基本知識吧,enum沒法繼承其餘類,由於它已經繼承了java.lang.Enum。能夠實現其餘接口。而後使用enum須要構造方法。而enum裏面的構造方法默認是private,所以,你沒法再外部new一個enum類。安全

public enum TestEnum {

    NOMARL(1,"成功"),
    FAIL(2,"失敗");

    private int code;
    private String message;

    TestEnum(int code,String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return this.code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return this.message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
public static void main(String[] args) throws InterruptedException, ParseException {
        System.out.println(TestEnum.NOMARL.getMessage());
    }

  上面就是枚舉的使用,若是你在TestEnum的構造方法中打個斷點,調試你會發現,當使用TestEnum.NOMARL會調用構造方法,將code設置爲1,message設置爲「成功」,而後調用getMessage()就會輸出「成功」了。數據結構

  枚舉的使用算是比較簡單了。下面分析一下使用場景以及使用枚舉的好處。性能

  當咱們須要一些有窮對象的集合的時候,咱們可使用枚舉。好比一般JavaWeb接口返回數據的code,好比參數錯誤,操做成功,操做失敗等等。若是直接在代碼裏面寫1,2,3這種去標識的話,會讓代碼看起來很難懂。這個時候咱們可使用枚舉。this

  不過這種狀況咱們徹底能夠新建一個類,再裏面寫常量用來定義各類code,一樣能夠在外部使用。那麼到底這兩種方式誰更好呢?在網上查了幾篇文章,基本說的是如下三點好處。調試

  1. 可讀性高,更容易理解code

這點我並不認同,由於枚舉或者常量都須要名字來標識,好比上面的NOMARL,對象

public class ResponseCode {
public static final int NOMARL = 1;
}

使用這種寫法也能夠達到一樣的效果。外部調用一樣只須要ResponseCode.NOMARL就行了。blog

  2. 類型安全繼承

這個的確是其中一種好處,好比setCode()方法。咱們固然可使用常量。可是一樣對於不知道的人來講,他徹底可使用setCode(-1)這種寫法,而且不會報錯。可是它可能並不合理。若是咱們使用枚舉的話,就必須去枚舉類裏面添加上你想要的code,而後才能調用setCode()方法。

  3. 耦合性高,擴展性好

這點我也不是很認同,由於用常量和枚舉,若是須要改動,咱們同樣直用修改枚舉或者常量裏面的內容就行了,外部代碼的引用也會隨之更改。

  另外再說一點,當咱們的常量的類型是Map.Set這種數據結構的時候,咱們應該考慮使用EnumMap或者EnumSet,由於他們的性能更高。

相關文章
相關標籤/搜索