本篇文章為大家帶來了關於java的相關知識,其中主要介紹了關於與枚舉使用的相關問題,包括了枚舉的概念、枚舉的優缺點以及枚舉的常用方法,希望對大家有幫助。
推薦學習:《java教學》
枚舉是Java1.5引入的新特性,透過關鍵字enum定義枚舉類別。枚舉類別是一種特殊類,它和普通類別一樣可以使用建構器、定義成員變數和方法,也能實作一個或多個介面,但枚舉類別不能繼承其他類別。
Effctive Java中之所以推薦用枚舉代替所有常數Code,原因如下:
(1)類型檢查,有效性檢查
(2)枚舉作為一個類別,可以有自己的屬性(通常應該是常數,我沒遇到過不是的情況)以及自己的方法(否則只能用switch來寫,實際違反原則)
(3)和常數相比,無需查看文檔和源碼就能直接知道所有可能返回值,方便編碼。
然而這裡的問題就出在第一點上,實際上分散式環境下(1)並不是必然的。如果在業務處理中允許某個介面回傳值有未定義內容,那麼在反序列化中就不該對此拋出異常,不必死守(1)。同時,從第(2)點和第(3)點來看,這樣限制枚舉的使用範圍造成的影響是極大的。將有自己屬性,自己方法實現的枚舉改寫為code和其他方法的配合,需要的代碼量上升不少,而且代碼腐爛度極大增加。
(1)由於Java中支援單繼承,因此枚舉型別不能再繼承其他類別;
(2)使用枚舉作為回傳值可能造成的問題其實大家都知道就是客戶端和服務端版本不一致的話,會造成反序列化異常,於是《阿里巴巴JAVA開發手冊》對於這個問題的處理辦法就採取了盡量避免異常出現,所以禁止定義枚舉為回傳值。
對於業務開發來說,業務邏輯的複雜是必然的,隨著業務發展,需求只會越來越複雜,為了考慮到各種各樣的情況,程式碼中不可避免的會出現很多if-else。
一旦程式碼中if-else過多,就會大大的影響其可讀性和可維護性,而且程式碼顯得非常low。
枚舉可以解決這個問題;
關於枚舉與switch是個比較簡單的話題,使用switch進行條件判斷時,條件參數一般只能是整型,字符型。而枚舉型確實也被switch所支持,在java 1.7後switch也對字串進行了支持。這裡我們簡單看一下switch與枚舉類型的使用
static void testSwitch(Week week){ switch (week){ case MONDAY: System.out.println(week.getMeaning()); break; case TUESDAY: System.out.println(week.getMeaning()); break; case WEDNESDAY: System.out.println(week.getMeaning()); break; case THURSDAY: System.out.println(week.getMeaning()); break; case FRIDAY: System.out.println(week.getMeaning()); break; case SATURDAY: System.out.println(week.getMeaning()); break; case SUNDAY: System.out.println(week.getMeaning()); break; default: System.out.println("您输入有误"); break; }}
java學習教程》
以上是詳細整理java枚舉的使用總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!