java enum(枚举)的使用
在實際編程中,往往存在著這樣的“數據集”,它們的數值在程序中是穩定的,而且“數據集”中的元素是有限的。
例如星期一到星期日七個數據元素組成了一周的“數據集”,春夏秋冬四個數據元素組成了四季的“數據集”。
enum 的全稱為 enumeration, 是 JDK 1.5? 中引入的新特性,存放在 java.lang 包中,在上面的這種情況下,enum就能派上用場了。枚舉類型的用途不僅如此,具體可用場景可看下面的介紹
1、常量
以前我們定義一個常量通常都是使用 public static final …… 定義的,如下面:
public static final CONSTANT_STR = "TEST";或者使用接口定義的變量,因為接口定義的變量默認都是public static final,如下:
/*** 星期的常量接口*/ public interface IWeekConstants {String MON = "Mon";String TUE = "Tue";String WED = "Wed";String THU = "Thu";String FRI = "Fri";String SAT = "Sat";String SUN = "Sun"; }有了枚舉我們可以使用下面的方式:
public enum WeekEnum {MON, TUE, WED, THU, FRI, SAT, SUN; }解釋:創建枚舉類型要使用 enum 關鍵字,隱含了所創建的類型都是 java.lang.Enum 類的子類(java.lang.Enum 是一個抽象類)。枚舉類型符合通用模式?Class Enum<E extends Enum<E>>,而?E?表示枚舉類型的名稱。枚舉類型的每一個值都將映射到?protected Enum(String name, int ordinal)?構造函數中,在這里,每個值的名稱都被轉換成一個字符串,并且序數設置表示了此設置被創建的順序。
上面那段代碼聲明的enum對象實際上調用了7次Enum(String name, int ordinal) 這個構造函數。(name 是常量,上面是MON,TUE等,ordinal是被創建順序)
new Enum<EnumTest>("MON",0); new Enum<EnumTest>("TUE",1); new Enum<EnumTest>("WED",2); 。。。。。。?
2、switch
當我們用switch時,一般都是使用int和char,但其實枚舉也可以用在switch中,而且可能使用枚舉,可以讓我們的代碼的可讀性更強。下面是枚舉使用enum的例子
enum Color{ GREEN, YELLOW, RED } public class TrafficLight { Color color = Color.RED; public void change() { switch (color) { case RED: System.out.println("紅色"); break; case YELLOW: System.out.println("黃色"); break; case GREEN: System.out.println("綠色"); break; } } }3、向枚舉中添加新方法 + 遍歷
我們使用常量的時候,我們使用接口的時候是可以有值與之對應的,如上面IWeekConstants?接口的MON的值是Mon,但枚舉好像沒能標示出這種意義。下面我們就討論該方式的實現和枚舉類型的遍歷
枚舉類型提供了構造函數,我們可以通過構造函數和覆寫toString方法來實現。實現代碼如下:
package com.zcr.test;enum ActionTypeEnum{//通過括號賦值,而且必須帶有一個參構造器和一個屬性跟方法,否則編譯出錯//賦值必須都賦值或都不賦值,不能一部分賦值一部分不賦值;如果不賦值則不能寫構造器,賦值編譯也出錯下載(1,"xiazai"),訪問(2,"fangwen");int index;String name;private ActionTypeEnum(int index,String name){this.index = index;this.name = name;}public int getIndex(){return index;}public void setIndex(int index){this.index = index;}public String getName(){return name;}public void setName(String name){this.name = name;}}public class EnumTest {public static void main(String[] args){ActionTypeEnum[] actionTypeEnums = ActionTypeEnum.values();for(ActionTypeEnum actionTypeEnum : actionTypeEnums){System.out.println("name=" + actionTypeEnum.getName());System.out.println("index= " + actionTypeEnum.getIndex());System.out.println("oridary=" + actionTypeEnum.ordinal());System.out.println("this = " + actionTypeEnum);System.out.println("下載值:" + actionTypeEnum.valueOf("下載"));System.out.println("name()方法= " + actionTypeEnum.name());System.out.println("--------------叫我分割線------------------");}} }運行結果:
name=xiazai index= 1 oridary=0 this = 下載 下載值:下載 name()方法= 下載 --------------叫我分割線------------------ name=fangwen index= 2 oridary=1 this = 訪問 下載值:下載 name()方法= 訪問 --------------叫我分割線------------------4、總結
?可以把 enum 看成是一個普通的 class,它們都可以定義一些屬性和方法,不同之處是:enum 不能使用 extends 關鍵字繼承其他類,因為 enum 已經繼承了 java.lang.Enum(java是單一繼承),但可以繼承接口。
致謝:感謝您的閱讀!
總結
以上是生活随笔為你收集整理的java enum(枚举)的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java算法--串的简单处理
- 下一篇: windows php swoole 安