Java-枚舉(Enum)
1.枚舉概述
枚舉是一個被命名的整型常數的集合,用於聲明一組帶標識符的常熟。當一個變量有幾種固定可能的取值時,就可以將其定義為枚舉類型。
1.1 聲明枚舉
Java中枚舉是一個特殊的類,使用enum關鍵字來定義,常量之間使用逗號’,’來分割。
可定義枚舉名稱、可訪問性基礎類型和成員等,聲明格式如下:
enum-modifiers enum enumname:enum-base {
enum-body,
}
- enum-modifiers 枚舉可訪問性,包含public,private,internal (同一應用程序集內部(單獨的項目,而不是整個解決方案)
- enumname 枚舉名稱
- enum-base 枚舉的基礎類型 (默認為int)
- enum-body 枚舉的成員(枚舉類型的命名常數)
註:任意兩個枚舉成員不能具有相同的名稱,且它的常數值必須在該枚舉的基礎類型的範圍之內,多個枚舉成員之間使用逗號分隔。
2.枚舉類
如1.1所述,Java中的枚舉為特殊的類,均繼承自java.lang.Enum類。每個枚舉類型成員可看作為一個Enum類的實例,默認被final,public,static修飾,使用枚舉類型成員時直接使用枚舉名稱調用成員即可。
枚舉實例常調用的Enum類方法如下:
一些具體用法:
public class EnumTest {
public static void main(String[] args){
System.out.println(SexEnum.valueOf("male").ordinal());
System.out.println(SexEnum.values()[0].ordinal());
}
}
enum SexEnum{
male,female;
}
3.為枚舉添加方法
枚舉常量可以有自己的方法,此時需注意:
需在枚舉實例的最後一個成員後添加分號,且必須先定義枚舉實例。
eg.創建WeekDay枚舉
enum WeekDay{
Mon("Monday"),Tue("Tuesday"),Wed("Wednesday"),Thu("Thusday"),
Fri("Friday"),Sat("Saturday"),Sun("Sunday");
private String day;
WeekDay(String day) {
this.day = day;
}
public static String getDay(int i){
switch(i){
case 1:
return WeekDay.Mon.day;
case 2:
return WeekDay.Tue.day;
default:
System.out.println("Wrong Number!");
return null;
}
}
//重寫了父類的方法
@Override
public String toString() {
return day;
}
}
註:若枚舉類中含抽象方法,則需在枚舉類中的每個對象都將其實現
enum SexEnum{
male{
public String getSex(){
return("Male");
}
},
female{
public String getSex(){
return("Female");
}
};
public abstract String getSex();
}
4.EnumMap與EnumSet
4.1 EnumMap類
EnumMap 是專門為枚舉類型量身定做的 Map 實現。雖然使用其他的 Map(如 HashMap)實現也能完成枚舉類型實例到值的映射,但是使用 EnumMap 會更加高效。
定義方法:Map<SexEnum, Integer> map1 = new EnumMap<SexEnum, Integer>(SexEnum.class);
4.2 EnumSet類
EnumSet 是枚舉類型的高性能 Set 實現,它要求放入它的枚舉常量必須屬於同一枚舉類型。
EnumSet 提供了許多工廠方法以便於初始化,如下所示
定義方法:
EnumSet\<SexEnum> set = EnumSet.of(SexEnum.female);
Set\<SexEnum> set1 = EnumSet.complementOf(set);