平时学习很少接触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