枚舉類型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()的方式調用即可。友善、簡潔又安全。