我們都知道Java中的類和接口可以完成許多功能,但是在實際的應用中人們發現有的需求和功能類和接口無法實現。比如當我們需要對一些類的屬性需要作出限制時,這些方法就不太適用,為了解決這種問題,在JDK1.5之後引入了枚舉類型,這篇文章中老梁就和大家一起好好聊聊枚舉。還是老樣子,老梁還是先舉一個例子來闡述枚舉的基本定義,如下圖:
從老梁上面的例子大家可以看出枚舉的特點,那就是枚舉在使用的時候有點像Java中對象的常量定義,不過在枚舉的定義中對這些常量進行了確切的定義,不可以隨意更改。對於「常量」的使用來說,我們通常的使用就是需要將它進行遍歷。枚舉類型亦不例外,在下面的例子中老梁使用enum.values()的方式,通過foreach直接將枚舉中的內容全部輸出,具體的代碼例子可以看下圖:
枚舉不但可以使用foreach進行遍歷,還可以使用switch對枚舉中的內容進行判斷。這樣算起來,枚舉還是在無形中擴大了switch的使用範圍,要知道在平時使用的時候switch通常用來判斷char型和int的數據。具體的使用例子可以參考老梁給出的代碼例子,如下圖:
在這裡我們需要注意的是,在老梁舉的例子中使用了EnumTest.values()這個方法,這個方法表示取得了枚舉中的全部內容,返回的是一個對象數組,這是枚舉本身自帶的方法。不是老梁舉例出現錯誤導致switch方法失效。如果大家想看更具體的switch方法的效果,不妨自己進行一下編碼嘗試。
從之前老梁舉的例子中大家可以看到,枚舉的定義可以使用關鍵字enum來實現。實際上這個關鍵字表示的是java.lang.Enum。就是當我們使用enum這個關鍵字來聲明的時候就相當於創建了一個java.lang.Enum類型的對象。而常用的枚舉方法如下表:
在前面的文章中老梁介紹了幾個主要的接口,當時老梁說這幾個接口別看簡單但是使用頻繁。在今天關於枚舉的知識點中就有相關接口的使用。那就是EnumMap和EnumSet,這兩個類可以使得關於枚舉的操作變得更加簡單,其中的EnumMap接口是Map接口的一個特殊實現,大家可以一起來看看這兩個接口的強大。
同樣的,EnumSet是Set接口的子類,所以裡面不能出現重複的內容,在使用EnumSet時不能直接進行實例化,需要藉助EnumSet接口提供的靜態方法才可以。具體的靜態方法如下表,老梁在這裡只舉一個例子,而關於相關方法的使用大家可以自己進行嘗試。
從上面的兩個例子我們可以看到,通過EnumMap和EnumSet接口方法的定義,我們可以將枚舉中的內容轉移到Map或者Set中,這樣就可以使用這兩個接口的特點來完成操作,十分方便。好啦,今天關於枚舉的內容老梁就講到這裡。說起來,枚舉的使用不太常見,它的使用主要是為了彌補類和接口的不足,不過大家也需要了解枚舉的相關知識,畢竟有備無患,在開發的時候我們並不能確定一定不會用到枚舉。