枚舉

枚舉

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

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

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息