開發日常小結(9):如何在專案中定位列舉類的作用,並使用列舉類?-- 列舉類描述業務物件狀態的例項詳解
阿新 • • 發佈:2019-01-03
2018年4月11日
列舉類在專案中,作為常量狀態經常被使用,剛剛開始接觸時還有點不適應,現在已經能夠靈活的使用了。
【1】概念
先看一個簡單的列舉類。
package enumcase; public enum SeasonEnum { SPRING,SUMMER,FALL,WINTER; }
- enum和class、interface的地位一樣
- 使用enum定義的列舉類預設繼承了java.lang.Enum,而不是繼承Object類。列舉類可以實現一個或多個介面。
- 列舉類的所有例項都必須放在第一行展示,不需使用new 關鍵字,不需顯式呼叫構造器。自動新增public static final修飾。
- 使用enum定義、非抽象的列舉類預設使用final修飾,不可以被繼承。
- 列舉類的構造器只能是私有的。
【2】列舉類使用
列舉類內也可以定義屬性和方法,可是是靜態的和非靜態的。
package enumcase; public enum SeasonEnum { SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天"); private final String name; private SeasonEnum(String name) { this.name = name; }public String getName() { return name; } }
實際上在第一行寫列舉類例項的時候,預設是呼叫了構造器的,所以此處需要傳入引數,因為沒有顯式申明無參構造器,只能呼叫有引數的構造器。
構造器需定義成私有的,這樣就不能在別處申明此類的物件了。列舉類通常應該設計成不可變類,它的Field不應該被改變,這樣會更安全,而且程式碼更加簡潔。所以我們將Field用private final修飾。
【3】Demo1 - 記錄狀態
public enum publishActionType { TO_ADD_PUBLISH(0), TO_MODIFY_PUBLISH(1) ; private int code; public int getCode() { return code; } public void setCode(int code) { this.code = code; } publishActionType(int code){ this.code = code; } }
【4】Demo2 -- 某型別
public enum WorldChannelType {
SYSTEM(1, "系統"),
CHAT(2, "聊天");
private int code;
private String name;
private WorldChannelType(int code, String name){
this.code = code;
this.name = name;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
【5】Demo3 -- 跳轉型別
public enum TurnUrlEnum {
NONE(0,"無跳轉","None",1),
GameWeb(1,"跳轉外部網頁連結","GameWeb",1),
Mall_SKIN(2,"跳轉到商城購買面板","Mall",1),
Mall_GOLD_COIN(3,"跳轉到商城購買金幣","Mall",1),
Mall_DISMONDS(4,"跳轉到商城購買鑽石","Mall",1),
Mall_PROP(5,"跳轉到商城購買道具","Mall",1),
ACTIVITY_LAYER(6,"跳轉到活動頁面","ACTIVITY_LAYER",1),
;
private int urlTypeId; //對應excel表的xmlId
private String nameCh; //名稱
private String nameEng; //出售價格
private int permission; //選擇許可(0:不許可;1:開放)
public static TurnUrlEnum getEnum(int id){
for(TurnUrlEnum e : TurnUrlEnum.values()){
if(e.getUrlTypeId() == id) {
return e;
}
}
return NONE;
}
public int getUrlTypeId() {
return urlTypeId;
}
public void setUrlTypeId(int urlTypeId) {
this.urlTypeId = urlTypeId;
}
public String getNameCh() {
return nameCh;
}
public void setNameCh(String nameCh) {
this.nameCh = nameCh;
}
public String getNameEng() {
return nameEng;
}
public void setNameEng(String nameEng) {
this.nameEng = nameEng;
}
public int getPermission() {
return permission;
}
public void setPermission(int permission) {
this.permission = permission;
}
private TurnUrlEnum(int urlTypeId, String nameCh, String nameEng,
int permission) {
this.urlTypeId = urlTypeId;
this.nameCh = nameCh;
this.nameEng = nameEng;
this.permission = permission;
}
}
以上是對列舉類的一個小結。