java Enum


現在做什么都講究個逼格,編程也不例外,如果在你的代碼中加了枚舉,那么逼格就會高很多 o(∩_∩)o
在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) 編譯報錯  }

這樣既有很好的閱讀性又避免的安全性問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM