如果類的對象的數量只有有限個,並且可以確定對象的屬性,那麼考慮使用枚舉類。所有的枚舉類型都是 Enum 類的子類。它們繼承了這個類的許多方法。 ...
如果類的對象的數量只有有限個,並且可以確定對象的屬性,那麼考慮使用枚舉類。例如:
- 性別:Man(男)、Woman(女)
- 訂單狀態:Nonpayment(未付款)、Paid(已付款)、Delivered(已發貨)、Checked(已確認收貨)
定義枚舉類型
public enum UserType {
// 1.提供枚舉類的對象(枚舉常量)
common("普通用戶", 0),
sectionAdmin("板塊管理員", 1),
superAdmin("超級管理員", 2);
// 2.對象的屬性
private String typeName;
private Integer typeId;
// 3.私有化構造器(private 可省略)
private UserType(String typeName, Integer typeId) {
this.typeName = typeName;
this.typeId = typeId;
}
}
介紹枚舉類型
如果需要的話,可以在枚舉類型中添加一些構造器、方法和域。當然,構造器只是在構造枚舉常量的時候被調用。
所有的枚舉類型都是 Enum 類的子類。它們繼承了這個類的許多方法。其中最有用的一個是 toString() 方法,這個方法能夠返回枚舉常量名。例如,Size.SMALL.toString() 將返回字元串 “SMALL”。
toString() 的逆方法是 valueOf() 靜態方法。例如,語句:Size s = Enum.valueOf(Size.class, "SMALL"); 將變數 s 設置成 Size.SMALL。
每個枚舉類型都有一個靜態的 values() 方法,它將返回一個包含全部枚舉值的數組。
ordinal 方法返回 enum 聲明中枚舉常量的位置,位置從 0 開始計數。例如:Size.SMALL.ordinal() 返回 0。
public static void main(String[] args) {
// [common, sectionAdmin, superAdmin]
UserType[] userTypes = UserType.values();
// 返回具有指定名稱的枚舉常量
UserType common = UserType.valueOf("common");
// 返回具有指定名稱的指定枚舉類型的枚舉常量
UserType common1 = Enum.valueOf(UserType.class, "common");
// 返回枚舉常量的名稱 (Enum 類重寫了 toString() )
String name = common.toString();
}
枚舉類實現介面
情況一:把枚舉類當作正常的類,在類中實現介面
情況二:每個枚舉常量分別實現介面
public enum UserType implements UserService {
// 1.提供枚舉類的對象
common("普通用戶", 0) {
@Override
public void method() {
}
},
sectionAdmin("板塊管理員", 1) {
@Override
public void method() {
}
},
superAdmin("超級管理員", 2) {
@Override
public void method() {
}
};
// 2.對象的屬性
private String typeName;
private Integer typeId;
// 3.私有化的構造器
private UserType(String typeName, Integer typeId) {
this.typeName = typeName;
this.typeId = typeId;
}
}
參考資料
《Java核心技術捲一:基礎知識》(第10版)第5章:5.6 枚舉類
本文來自博客園,作者:真正的飛魚,轉載請註明原文鏈接:https://www.cnblogs.com/feiyu2/p/enum.html