平時學習很少接觸enum,很多時候會使用常量代替。在工作時可能會或多或少用到enum方法,下面是幾個工作中常用的方法,基本上能滿足絕大多數使用場景
簡單的enum
public enum Color {
RED, GREEN, BLANK, YELLOW
}
添加參數并使用switch
public enum AreaChangeStatus {
UNCRAWLED(0),
SUBMIT_TO_CRAWL(1);
public int value;
// 參數使用通過構造方法傳入進來的
AreaChangeStatus(int i) {
this.value = i;
}
// 使用switch獲得相應的enum對象
public static AreaChangeStatus of(int value) {
switch (value) {
case 0:
return UNCRAWLED;
case 1:
return SUBMIT_TO_CRAWL;
default:
return UNCRAWLED;
}
}
}
enum帶參數需要在創建一個帶參數的改造方法,如果類型固定可以使用switch實現通過對應的參數獲取其對象。如果覺得使用switch不夠智能,每次添加新的enum的使用都用在switch中添加一個case,那么可以使用for循環,見下面的代碼:
public enum AreaChangeStatus {
UNCRAWLED(0),
SUBMIT_TO_CRAWL(1);
public int value;
AreaChangeStatus(int i) {
this.value = i;
}
// 使用for循環
public static AreaChangeStatus of(int value) {
for(AreaChangeStatus area : AreaChangeStatus.values()){
if(area.value == value){
return area;
}
}
}
}
這個寫只需要在上面添加enum就可以了,不需要在of方法中修改代碼。
多個參數參數使用普通方式
public enum AlgoVersion {
V1(1, "V1", "冒泡排序算法"),
V2(2, "V2", "快速排序算法"),
;
private int code;
private String version;
private String desc;
AlgoVersion(int code, String version, String desc) {
this.code = code;
this.version = version;
this.desc = desc;
}
public int getCode() {
return code;
}
public String getVersion() {
return version;
}
public String getDesc() {
return desc;
}
public static AlgoVersion of(int code) {
if (code == 1) {
return V1;
} else if (code == 2) {
return V2;
} else {
return V1;
}
}
public static AlgoVersion of(String version) {
if ("V1".equalsIgnoreCase(version)) {
return V1;
} else if ("V2".equalsIgnoreCase(version)) {
return V2;
} else {
return V1;
}
}
}
enum方法不是在實際開發中常用的方法,雖然他功能強大,但是有一點學習門檻,并且好多場景使用常量就已經足夠了。只要掌握了上面的4個例子,基本上項目中需要用到enum的地方,都可以輕松搞定。
參考:
IBM Enum WIKI