java之 ------ 枚舉類型
枚舉
一、枚舉類型具體說明
簡單的說。Enum一般用來表示一組同樣類型的常量。
如性別、日期、月份、顏色等。對這些屬性用常量的優點是顯而易見的,不僅能夠保證單例,且在比較的時候能夠用”==”來替
換equals。JDK1.5之前沒有Enum這個類型,那時候一般用接口常量來替代。
定義枚舉類型時本質上就是在定義一個類別。僅僅只是非常多細節由編譯器幫您完畢了。所以某些程度上,enum是一個keyword,它的作用就像是class或interface。(這就是為什麽有些人找不到當中的value()方法)
二、枚舉類型的用法
1)常量
在Enum出現之前,我們定義常量通常是:public static fianl....?
如:
<span style="font-size:14px;">enum Signal { GREEN, YELLOW, RED; } </span>
用的時候:Signal s = Signal.RED;即可了
註:用這個方案使用枚舉類型,RED後面的分號能夠不用寫
2)switch
<span style="font-size:14px;">public class TrafficLight { Signal color = Signal.RED; public void change() { //交通燈切換 switch (color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } } </span>
<span style="font-size:14px;">public enum Color { RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLOW("黃色", 4) ; // 成員變量 private final String name; private final int index; // 構造方法,必須私有 private Color(String name, int index) { this.name = name; this.index = index; } public String getName() { return name; } public int getIndex() { return index; } } </span>
註:假設打算自己定義自己的方法。那麽必須在enum實例序列的最後加入一個分號。
也就是這裏的YELLOW("黃色",4)後面必須有“ ; ”
。三、枚舉的靜態方法
枚舉的靜態方法有兩個
1)values()獲取枚舉類型的全部枚舉常量返回值為static?ElementType[]
for(UserTypeEnum userType: UserTypeEnum.values()){ <span style="white-space:pre"> </span>if(userType.getName().equalsIgnoreCase(name)){ return userType.getType(); } }
2)valueOf(Class<T>
enumType, String name) 返回帶指定名稱的指定枚舉類型的枚舉常量。返回值為static?ElementType
註:然後就發現一個問題,value方法我怎麽找不到,查查才發現。?values()方法是編譯器插入到enum定義中的static方法。所以,當你將enum實例向上轉型為父類Enum類,
values()就不可訪問了。
解決的方法:在java.lang包下一個java.lang.annotation包(凝視的意思),裏面有一個ELementType類,當中就有想要找的這兩個靜態方法。
所以不能說
枚舉類型實質上繼承java.lang.Enum類。
四、EnumSet類和EnumMap類
這兩個類在java.util包中。看看api,主要的運用應該沒什麽問題。
java之 ------ 枚舉類型