Java中的Enum枚舉使用方法解析
一、為什么需要枚舉
舉個例子,生物界性別分“雄性”、“雌性”和“中性”,將其定義為靜態(tài)常量:
public class Gender{ public static final int Male = 1; public static final int Female = 2; public static final int Neutral = 3; }
對于這種單值類型的靜態(tài)常量定義,本身也沒錯,主要是在使用的地方?jīng)]有一個明確性的約束而已,比如這里的 judgeGender 方法的本意是傳入 Gender 的三種靜態(tài)常量之一,但由于沒有類型上的約束,因此傳入任意一個 int 值都是可以的,編譯器也不會提出任何警告。
void judgeGender(int code){}
但是在枚舉類型出現(xiàn)之后,上面這種情況就可以用枚舉嚴謹?shù)厝ゼs束,比如用枚舉去定義性別就非常簡潔了:
public enum Gender { Male, Female, Neutral }
而且主要是在用枚舉的地方會有更強的類型約束。如下入?yún)㈩愋途蜁艿矫鞔_的類型約束,一旦傳入無效值,編譯器就會幫檢查,從而規(guī)避潛在問題。除此之外,枚舉在擴展性方面比普通常量更方便、也更優(yōu)雅。
//入?yún)⒕拖薅祟愋? void judgeGender(Gender gender){}
綜上,枚舉的意義:
- 封裝有限的變化,提高代碼維護性,確保變量合法。 如果利用 int 類型表示星期一到星期日的話,就要判斷輸入 int 變量不在 1-7 的范圍內(nèi)的情況。
- 代碼更優(yōu)雅,提高代碼可讀性。一個復制的程序里面,可能要用到成百上千的靜態(tài)常量,如果全寫在一個文件里面,容易造成命名混淆,程序讀起來也比較麻煩。
二、單值枚舉
定義一個性別枚舉:
public enum Gender { Male, Female, Neutral }
枚舉的所有基本用法:
public class judgeGender { public static void main(String[] args) { for (Gender genderType : Gender.values()) { System.out.println(genderType); } Gender male = Gender.Male; Gender female = Gender.Female; Gender neutral = Gender.Neutral; System.out.println(male.ordinal());//0 System.out.println(female.ordinal());//1 System.out.println(neutral.ordinal());//2 System.out.println(male.name());//Male System.out.println(female.name());//Female System.out.println(neutral.name());//Neutral System.out.println(male.compareTo(male));//0 System.out.println(male.compareTo(female));//-1 System.out.println(female.compareTo(neutral));//-1 System.out.println(Gender.valueOf("Male"));//Male System.out.println(Gender.valueOf("Female"));//Female System.out.println(Gender.valueOf("Neutral"));//Neutral Gender gender = Gender.Male; switch (gender) { case Male: System.out.println("男"); break; case Female: System.out.println("女"); break; case Neutral: System.out.println("中性"); break; }//男 } }
三、多值枚舉
上面展示的枚舉例子非常簡單,僅僅是單值的情形,而實際項目中用枚舉往往是多值用法。擴充一下上面的 Gender 枚舉,在里面加入 【說明 – 編碼】的對應關系,這也是實際項目中常用的用法??梢栽诿杜e里自定義各種屬性、構(gòu)造函數(shù)、甚至各種方法:
public enum GenterType { Male("男", "01"), Female("女", "02"), Neutral("中性", "03"), ; //自定義屬性 private final String explain; private final String code; public String getExplain() { return explain; } public String getCode() { return code; } //自定義構(gòu)造函數(shù) GenterType(String explain, String code) { this.explain = explain; this.code = code; } }
從上述代碼可知,在 enum 枚舉類中完全可以像在普通 Class 里一樣聲明屬性、構(gòu)造函數(shù)以及成員方法。
四、專門用于枚舉的集合類
一般習慣于使用諸如:HashMap 和 HashSet 等集合來盛放元素。而對于枚舉,有專門的集合類: EnumSet 和 EnumMap
- EnumSet
EnumSet 是專門為盛放枚舉類型所設計的 Set 類型。
- EnumMap
EnumMap 則是用來專門盛放枚舉類型為 key 的 Map 類型。
到此這篇關于Java中的Enum枚舉使用方法解析的文章就介紹到這了,更多相關Java中的Enum枚舉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SSH框架網(wǎng)上商城項目第25戰(zhàn)之使用java email給用戶發(fā)送郵件
這篇文章主要為大家詳細介紹了SSH框架網(wǎng)上商城項目第25戰(zhàn)之使用java email給用戶發(fā)送郵件,感興趣的小伙伴們可以參考一下2016-06-06使用SpringMVC響應json格式返回的結(jié)果類型
這篇文章主要介紹了使用SpringMVC響應json格式返回的結(jié)果類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07關于報錯IDEA Terminated with exit code
如果在IDEA構(gòu)建項目時遇到下面這樣的報錯IDEA Terminated with exit code 1,那必然是Maven的設置參數(shù)重置了,導致下載錯誤引起的,本文給大家分享兩種解決方法,需要的朋友可以參考下2022-08-08SpringBoot+STOMP協(xié)議實現(xiàn)私聊、群聊
本文將結(jié)合實例代碼,介紹SpringBoot+STOMP協(xié)議實現(xiàn)私聊、群聊,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-06-06java存儲以及java對象創(chuàng)建的流程(詳解)
下面小編就為大家?guī)硪黄猨ava存儲以及java對象創(chuàng)建的流程(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05springboot?log4j2日志框架整合與使用過程解析
這篇文章主要介紹了springboot?log4j2日志框架整合與使用,包括引入maven依賴和添加配置文件log4j2-spring.xml的相關知識,需要的朋友可以參考下2022-05-05Java通過調(diào)用C/C++實現(xiàn)的DLL動態(tài)庫——JNI的方法
這篇文章主要介紹了Java通過調(diào)用C/C++實現(xiàn)的DLL動態(tài)庫——JNI的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-01-01