public enum EnumDay{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THRUSDAY, FRIDAY, SATURDAY; }
這就定義了SUNDAY~SATURDAY的枚舉了。html
上面的EnumDay其實隱含了所建立的類型都是java.lang.Enum類的子類,枚舉類型符合通用模式Class Enum<E extends Enum<E>>,E表示的就是枚舉類型的名稱。枚舉類型的每java
一個值都將映射到protected Enum<String name, int ordinal>構造函數中,在這裏,每一個值的名稱都被轉換爲一個字符串,而且序數設置表示了此設置被建立的順序。安全
new Enum<EnumDay>("SUNDAY", 0); new Enum<EnumDay>("MONDAY", 1); new Enum<EnumDay>("TUESDAY", 2); new Enum<EnumDay>("WEDNESDAY", 3); new Enum<EnumDay>("THRUSDAY", 4); new Enum<EnumDay>("FRIDAY", 5); new Enum<EnumDay>("SATURDAY", 6);
因此,每一個枚舉值都是一個泛型爲EnumDay的Enum就能夠了。ide
EnumDay sunday = EnumDay.SUNDAY;
既然知道了枚舉類型裏面的枚舉值都是一個Enum<EnumDay>,那就好辦了,能夠查看JDK API來看下Enum裏面有哪些方法並使用下,看一下例子:函數
詳情見參考。this
重寫了兩次toString()方法,自定義getValue()方法,自定義屬性value。spa
public enum EnumDay{ SUNDAY(123), MONDAY(234), TUESDAY(345), WEDNESDAY(456), THURSDAY(567), FRIDAY(678), SATURDAY(789){ @Override public String toString() { return "aaa-" + getValue(); } }; @Override public String toString() { return "bbb-" + getValue(); } private int value; private EnumDay(Integer value){ this.value = value; } public int getValue() { return value; } public static void main(String[] args) { EnumSet<EnumDay> enumDays = EnumSet.allOf(EnumDay.class); for(EnumDay enumDay : enumDays) { System.out.println(enumDay.name() + ": " + enumDay.toString()); } System.out.println("============="); for(EnumDay enumDay : enumDays) { System.out.println(enumDay.getValue() + "===" + enumDay.value); } } }
結果:線程
SUNDAY: bbb-123 MONDAY: bbb-234 TUESDAY: bbb-345 WEDNESDAY: bbb-456 THURSDAY: bbb-567 FRIDAY: bbb-678 SATURDAY: aaa-789 ============= 123===123 234===234 345===345 456===456 567===567 678===678 789===789
枚舉中的每個(相似SUNDAY、MONDAY。。。),都是一個泛型爲EnumDay的Enum,toString()時本身有就用本身的,沒有的話就用公共的。code
EnumSet和EnumMap是分別爲枚舉類型定製的Set和Map,看一下它們的用法:htm
public enum EnumDay{ SUNDAY(123), MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY; private int value; private EnumDay(Integer value){ this.value = value; } private EnumDay(){ } public int getValue() { return value; } public static void main(String[] args) { EnumSet<EnumDay> enumDays = EnumSet.allOf(EnumDay.class); for(EnumDay enumDay : enumDays) { System.out.println(enumDay.name() + ":" + enumDay.getValue()); } EnumMap<EnumDay, String> enumMap = new EnumMap<>(EnumDay.class); enumMap.put(EnumDay.SUNDAY,"星期天"); enumMap.put(EnumDay.MONDAY,"星期一"); enumMap.put(EnumDay.TUESDAY,"星期二"); enumMap.put(EnumDay.WEDNESDAY,"星期三"); Iterator<Map.Entry<EnumDay, String>> iterator = enumMap.entrySet().iterator(); while(iterator.hasNext()){ Map.Entry<EnumDay, String> next = iterator.next(); System.out.println(next.getKey().name() + ":" + next.getValue()); } } }
結果:
SUNDAY:123 MONDAY:0 TUESDAY:0 WEDNESDAY:0 THURSDAY:0 FRIDAY:0 SATURDAY:0 SUNDAY:星期天 MONDAY:星期一 TUESDAY:星期二 WEDNESDAY:星期三
注意一下EnumSet和EnumMap都是線程非安全的。
參考資料:
https://www.cnblogs.com/xrq730/p/4890313.html