java之 ------ 枚舉類型


枚舉


一、枚舉類型詳細說明

簡單的說,Enum一般用來表示一組相同類型的常量。如性別、日期、月份、顏色等。對這些屬性用常量的好處是顯而易見的,不僅可以保證單例,且在比較的時候可以用”==”來替

換equals。JDK1.5之前沒有Enum這個類型,那時候一般用接口常量來替代。

定義枚舉類型時本質上就是在定義一個類別,只不過很多細節由編譯器幫您完成了,所以某些程度上,enum是一個關鍵字,它的作用就像是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,基本的運用應該沒什么問題。




















注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com