java枚舉類型深入分析

來源:互聯網
上載者:User

在Java SE5之前,我們要使用枚舉類型時,通常會使用static final 定義一組int常量來標識,代碼如下

public static final int MAN = 0;public static final int WOMAN = 1;

相信很多小夥伴,在實際開發中也是那麼乾的,既然這樣已經能實現枚舉的功能,為什麼還要引入枚舉呢。我們接著往下看當我們需要是同這組“int枚舉”是代碼如下

public void showSex(int sex){     switch(sex){        case MAN:           System.out.println("this is a boy");           break;            case WOMAN:           System.out.println("this is a Girl");           break;       } }

看起來這些貌似也沒什麼問題,但是我們知道,一個項目基本都是基於團隊開發,或許只有你自己知道int類型的1代表gril,0代表Boy。其他同事看到這個函數根本不知道其中的含義,這樣的代碼很明顯閱讀性很差,從而會造成溝通成本很高。我們接著往下看,現在你為你的func寫了很nice的注釋,傻子都能看得懂(0 boy,1 gril)。但是項目組不可避免的總會出現那麼一兩個傻子,非要給你傳個3進來,而且這樣的錯誤編譯器不會報任何錯誤,運行時會造成什麼bug,這個只有喬老爺知道了。所以這樣的代碼是極不安全的。使用枚舉就能很好的避免上面的問題,接下來我們就來理一理枚舉的用法。

枚舉用於儲存數量有限的一組固定的資料集。使用情境:上面說到的性別的表示,一年四級花牌 (春夏秋冬)的表示,一周七天的表示,顏色的表示等等。

枚舉的簡單用法

 // 普通枚舉 public enum ColorEnum {        white, red, green, blue; }    /**     *      * 枚舉中有一個內建的靜態方法values(),返回enum執行個體的資料並且該數組中的元素順序和聲明時的順序一樣      * 枚舉也可以像普通的類一樣可以添加屬性和方法,可以為它添加靜態和非靜態屬性或方法     */    public enum SeasonEnum {        //註:枚舉寫在最前面,否則編譯出錯        spring, summer, autumn, winter;        private final static String position = "test";        public static SeasonEnum getSeason() {            if ("test".equals(position))                return spring;            else                return winter;        }    }     /**     * 帶構造器的枚舉     * 必須帶有一個參構造器和一個屬性跟方法,否則編譯出錯     *      */    public enum Mode {        PULLDOWN("下拉"), PULLUP("上拉");        private final String value;        /**         * 構造器預設也只能是private, 從而保證建構函式只能在內部使用         *          */        private Mode(String value) {            this.value = value;        }        public String getValue() {            return value;        }    }

枚舉中還有一個ordinal()方法返回一個int值,這是每個enum執行個體在聲明時的次序,從0開始。枚舉類還實現了Compareable介面,所以他具有compareTo()方法。同時還實現了Serializable介面,還自動為你提供了equals()和hashCode()方法。除了不能繼承一個枚舉類之外,我們基本上可以把枚舉類當成一個常規的Java類,可以往其中添加新的方法,包括抽象方法甚至main方法。

現在我們用枚舉來實現上面的那個性別函數

public enum EnumSex {        MAN, WOMAN    }    public static void showSex(EnumSex EnumSex) {        switch (EnumSex) {        case MAN:            System.out.println("this is a boy");            break;        case WOMAN:            System.out.println("this is a girl");            break;        }    }    public static void main(String[] args) {        showSex(EnumSex.MAN);        // showSex(EnumSex.Renyao) 編譯報錯    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.