天天看點

Java枚舉類型Enum用途總結

枚舉類型Enum主要用途之一,是用來管理錯誤碼,狀态碼。Enum類型實質是一種特殊的class,它不可以繼承其他類,也不可以被其他類繼承,但可以實作接口。

示例一:

public class EnumDemo {

    public static void main(String[] args){
        //直接引用
        Day day =Day.MONDAY;
        System.out.println(day);
    }

}
//定義枚舉類型
enum Day {
    MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
           

講解:

1.調用方式:Day.MONDAY

2.序号。MONDAY, TUESDAY, WEDNESDAY ... ...這些是枚舉類的執行個體,它們内部有預設的序号,從0開始,用方法

ordinal 擷取序号,Day.MONDAY.ordinal()為0,Day.TUESDAY.ordinal()為1 ... ...依次排下去。      

3.比較。内部實作了compareTo方法。可以用 == 或者equals 來判斷是否相同執行個體,兩方法都是可以的。不同類型的枚舉執行個體用==比較時,會編譯報錯。

下面是一種更好的實作,好在可以自定義枚舉執行個體的内容。

public enum ErrorCodeEn {
    OK(0, "成功"),
    ERROR_A(100, "錯誤A"),
    ERROR_B(200, "錯誤B");

    ErrorCodeEn(int number, String description) {
        this.code = number;
        this.description = description;
    }
    private int code;
    private String description;
    public int getCode() {
        return code;
    }
    public String getDescription() {
        return description;
    }

    /**
     * 下面是測試
     * @param args
     */
    public static void main(String args[]) { // 靜态方法
        for (ErrorCodeEn s : ErrorCodeEn.values()) {
            System.out.println("code: " + s.getCode() + ", description: " + s.getDescription());
        }
    }
}
           

講解:枚舉類的構造函數預設是私有的。通過構造函數自定義枚舉執行個體的内容,執行個體之間用逗号隔開,最後一個末尾加分号。用枚舉類型的get方法擷取枚舉執行個體的屬性。(執行個體就是用枚舉類型建立的對象)

上面就是Enum的基本用途。Enum還可以用來實作單例模式,被《Effective Java》稱為最佳的單例實作模式,因為最簡單,而且不會被反射和反序列化攻擊破壞。

實作示例:

public enum Singleton {

    INSTANCE;

    public void doSomething() {
        System.out.println("doSomething");
    }

}
           

調用示例:

public class Main {

    public static void main(String[] args) {
        Singleton.INSTANCE.doSomething();
    }

}
           

直接通過Singleton.INSTANCE.doSomething()的方式調用即可。友善、簡潔又安全。