Java-列舉(Enum)
阿新 • • 發佈:2021-09-17
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);