再见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. 最后根据参数名进行对应的方法
最后:
上述案例供参考,具体业务还是要根据自己需求来写
本文介绍了如何通过使用枚举类和Map来替代繁琐的if-else语句,以提高代码的可读性和效率。作者首先展示了传统的if-else结构,然后提出了使用枚举的抽象方法和静态Map来简化代码的方法,从而减少判断并优化了查找过程。在枚举类中,每个枚举实例对应一个特定的行为,并且通过Map实现了快速的键值对查找。这种方法对于处理固定选项的判断场景尤其适用。
290





