枚舉
一、枚舉類型具體說明
簡單的說。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>
3)向枚舉中加入新方法
<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>
由于是常量,是以不能讓其它人能夠new這個對象。也就是将這個類封裝起來。不讓不論什麼人能夠new。方法是通過将構造方法私有化即可。private Color(String name, int index)
注:假設打算自己定義自己的方法。那麼必須在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,主要的運用應該沒什麼問題。