Java高階特性之列舉學習總結
在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) 編譯報錯 }
這樣既有很好的閱讀性又避免的安全性問題
相關文章
- Java之列舉的注意Java
- 記學習滲透測試之列舉
- 簡單看看java之列舉Java
- 你一定需要知道的高階JAVA列舉特性!Java
- Java列舉類學習到進階Java
- Java高階特性—泛型Java泛型
- Java高階特性之集合Java
- (小白學JAVA之)Java高階特性知識點梳理Java
- 面試總結——Java高階工程師面試Java工程師
- Java高階特性增強-鎖Java
- 《Java 高階篇》八:新特性Java
- 最近Java高階工程師面試總結Java工程師面試
- JDK8新特性學習總結JDK
- Java集合學習總結Java
- MySQL高階特性——繫結變數MySql變數
- Python學習之高階特性Python
- React高階元件總結React元件
- Python 學習之列表Python
- Java集合類學習總結Java
- 階段性總結_學習筆記筆記
- 高質量C/C++程式設計指南總結(八)—— C++高階特性C++程式設計
- 【java學習】java知識點總結Java
- 暑期java(物件導向設計)學習第一階段總結Java物件
- mysql高階特性MySql
- Python 高階特性Python
- Mongodb高階特性MongoDB
- Redis高階特性Redis
- RocketMQ高階特性MQ
- python學習筆記-tip22(高階特性-列表生成式)Python筆記
- Java中IO流學習總結Java
- 學習Java第六週總結Java
- PHP高階語法總結PHP
- Java高階程式設計-姜國海 課程總結Java程式設計
- Java 從入門到高階學習路線Java
- 關於Html+css階段學習總結HTMLCSS
- 學習Java的第五週總結Java
- Java記憶體模型學習總結Java記憶體模型
- 338、分散式高階篇總結分散式
- SpringIOC的高階特性Spring