再见if-else
前言:
想必大家都被大量if-else所困扰,如图
这样子看起来头都疼,,下面是我的解决方法
if-else的代码就不展示了,大家都知道,直接上最终代码
枚举类
public enum PlayEnum {
NULL("") {
@Override
public String play() {
return null;
}
},
PHONE("PHONE") {
@Override
public String play() {
return "phone";
}
},
COMPUTER("COMPUTER") {
@Override
public String play() {
return "computer";
}
};
PlayEnum(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public PlayEnum getName(String name) {
for (PlayEnum playEnum : PlayEnum.values()) {
if (name.equals(playEnum.getName())) {
return playEnum;
}
}
return PlayEnum.NULL;
}
public abstract String play();
}
public class Test {
public static void main(String[] args) {
//玩手机还是电脑?
String [] names = new String[]{"PHONE","COMPUTER"} ;
for (String name : names) {
System.out.println(PlayEnum.NULL.getName(name).play());
}
}
}
输出结果
更新:
我发现了问题,是在枚举类中依然有if判断语句,如果判断数量过多,还是会有效率问题,于是我想到了解决方案
将所需要的枚举,存进map中,直接用map进行获取即可
import java.util.HashMap;
import java.util.Map;
public enum PlayEnum {
NULL("") {
@Override
public String play() {
return null;
}
},
PHONE("PHONE") {
@Override
public String play() {
return "phone";
}
},
COMPUTER("COMPUTER") {
@Override
public String play() {
return "computer";
}
};
PlayEnum(String name) {
this.name = name;
}
private String name;
public String getName() {
return name;
}
public static final Map<String,PlayEnum> playMap = new HashMap<>();
static {
playMap.put("NULL",NULL);
playMap.put("PHONE",PHONE);
playMap.put("COMPUTER",COMPUTER);
}
public PlayEnum getName(String name) {
return playMap.get(name) == null ? PlayEnum.NULL :playMap.get(name);
}
public abstract String play();
}
核心想法就是
1. 在枚举类中创建一个抽象方法,如 play() 并使每个枚举都实现这个方法
2. 创建一个方法 如 getName(String name) 将参数与所有枚举进行比较
3. 最后根据参数名进行对应的方法
最后:
上述案例供参考,具体业务还是要根据自己需求来写