【Java提升】---枚舉的應用

枚舉

   

   1、枚舉和靜態常量的區別  

       講到枚舉咱們首先思考,它和public static final String 修飾的常量有什麼不一樣。java

        我舉枚舉的兩個優勢:編程

     1. 保證了類型安全:調用者沒法隨意傳一個 int或者String 等值安全

     2.代碼可讀性很是高函數

舉個例子性能

        在實際編程中,每每存在着這樣的「數據集」,它們的數值在程序中是穩定的,並且「數據集」中的元素是有限的。例如春夏秋冬四個數據元素組成了四季的「數據集」。你寫了方法get(String season),輸入的類型只能測試

是String類型,同時要String只能是(春、夏。秋。冬)。this

這個時候。你寫四個字符串常量spa

public class Common { public static final String SPRING="春"; public static final String SEASON="夏"; public static final String SUMMER="秋"; public static final String AUTUMN="冬"; }

     在get方法裏放入get(Common.SEASON),確實是把"春",放進去了,可是這個時候你會發現這裏面有一個隱患,你get(String season),畢竟放入的是String類型的,若是新同事或者不知情的同事,不知道這個方法裏只code

能放「春、夏、秋、冬」,它放了個其期它字符串好比get("小小「),這個時候,在編譯期它是不會報錯的,只有運行以後,才發現錯了。對象

   爲了防止上面的隱患,枚舉出現了

public enum Season { SPRING("春"), SUMMER("夏"), AUTUMN("秋"), WINTER("冬"); ..... }

        這個時候,咱們修改get方法的傳參,改爲get(Season   season)   這個時候加入get(Season.SPRING),這就能保證傳入的參數只能是這幾個。

 

2、理解枚舉

        首要咱們要明確,其實枚舉也是個class類,我寫個枚舉來理解。

//咱們把枚舉當作一個普通類
public enum Season { SPRING(1,"春"), SUMMER(2,"夏" ), AUTUMN(3,"秋" ), WINTER(4,"冬");  //這裏最後一個必定要分號,不然報錯
    
    /*咱們能夠理解成 *public static final Season SPRING = new Season(1,春); *public static final Season SUMMER = new Season(2,夏); *public static final Season AUTUMN = new Season(3,秋); *public static final Season WINTER = new Season(4,冬); *既然是對象,那下面就很好理解了 */
    
    /* * 1.上面對象裏放了兩個參數,那下面就確定要有這個類型的構造函數 * 2.這裏是private,由於不能在被new對象了 */
    private Season(int code,String name) { this.name = name; this.code = code; } //對象的屬性
    private String name; private int code; //獲取對象屬性的方法
    public String getName() { return this.name; } public String getCode() { return this.name; } //經過code得到對象,咱們就能夠得到對象的其它屬性
    public static Season decode(int code) { Season season = null; for (Season type : Season.values()) { if (type.code==code) { season = type; break; } } return season; } //從新toString方法
    public String toString() { return this.name; } }

      上面這個例子,就很好解釋了枚舉,它和普通類沒什麼區別,只是用另外一種寫法建立了幾個有屬性的對象,這也必須寫這樣有屬性的構造函數,僅此而已。

這裏順便列舉下枚舉的一些特色:

    1.它不能有public的構造函數,這樣作能夠保證客戶代碼沒有辦法新建一個enum的實例。

    2.  枚舉不能在繼承其它類了,由於它默認繼承了java.lang.Enum

    3.  常量值地址惟一,能夠用==直接對比,性能會有提升.

    4.Enum還提供了values方法,這個方法使你可以方便的遍歷全部的枚舉值。

    5.Enum還有一個oridinal的方法,這個方法返回枚舉值在枚舉類種的順序,這個順序根據枚舉值聲明的順序而定。

 

3、枚舉的常見用法

第一種:switch運用

先建一個枚舉:

public enum Common { INSERT, MODIFY, DELETE } //由於這裏是無參的對象,因此能夠用系統默認的構造函數。也不用寫屬性和方法。

在寫實現代碼

public class CommonUtils { public static void getType(Common common){ Common c=common; switch(c) { case INSERT: System.out.println("進行插入操做"); break; case MODIFY: System.out.println("進行修改操做"); break; case DELETE: System.out.println("進行刪除操做"); break; } } public static void main(String[] args) { getType(Common.DELETE); //後臺輸出:進行刪除操做
 } }

第二種用法,經過key值得到value值獲取其它值

  枚舉類

public enum Season { SPRING(1,"春","春天放風箏"), SUMMER(2,"夏","夏天去游泳"), AUTUMN(3,"秋","秋天去秋遊"), WINTER(4,"冬","冬天吃火鍋"); private Season(int code,String name,String bz) { this.code = code; this.name = name; this.bz=bz; } private int code; private String name; private String bz; public static Season decode(int code) { Season season = null; for (Season type : Season.values()) { if (type.code==code) { season = type; break; } } return season; } public int getCode() { return code; } public String getName() { return name; } public String getBz() { return bz; } }

測試類

好了,就寫這麼多,之後有須要會更深刻了解。

 

想的太多,作的太少,中間的落差就是煩惱,要麼去作,要麼別想 少尉【18】

相關文章
相關標籤/搜索