⭐简单说两句⭐
作者:小常识
GZH:
后端小常识
欢迎关注点赞保藏⭐️留言
前言
亲爱的友友们,咱们今天来看一下如何巧妙使用枚举来代替if语句
能完成功能的代码千篇一律,但高雅的代码万里挑一
业务背景
在工作中遇到一个需求,通过简化后便是:需求根据不同的code值,处理逻辑,然后回来对应的目标。
我就简答举个栗子哈
根据 不同的code,回来不同的目标 传1 回来 一个目标,包括特点:name、age ; 传2,回来一个目标,包括特点name ; 传3,回来一个目标,包括特点sex …. 字段值默以为 test
思路
摇头版
public class TestEnum {
public static void main(String[] args) {
Integer code = 1;//这里为了简单,直接这么写的,实际情况一般是根据参数获取
JSONObject jsonObject = new JSONObject();
if(Objects.equals(0,code)){
jsonObject.fluentPut("name", "test").fluentPut("age", "test");
System.out.println("jsonObject = " + jsonObject);
}
if(Objects.equals(1, code)){
jsonObject.fluentPut("name", "test");
System.out.println("jsonObject = " + jsonObject);
}
if(Objects.equals(2,code)){
jsonObject.fluentPut("sex", "test");
System.out.println("jsonObject = " + jsonObject);
}
}
}
上面的代码在功能上是没有问题滴,可是要扩展的话就,比方 当code为4时,ba la ba la,咱们只有再去写一遍if语句,随着code的增加,if语句也会随之增加,后边的人接手你的代码时
高雅版
咱们首要界说一个枚举类,保护对应Code需求回来的字段
@Getter
@AllArgsConstructor
public enum DataEnum {
/**
* 枚举类
*/
CODE1(1,new ArrayList<>(Arrays.asList("name","age"))),
CODE2(2,new ArrayList<>(Arrays.asList("name"))),
CODE3(3,new ArrayList<>(Arrays.asList("sex")))
;
private Integer code;
private List<String> fields;
//传入code 即可获取对应的 fields
public static List<String> getFieldsByCode(Integer code){
DataEnum[] values = DataEnum.values();
for (DataEnum value : values) {
if(Objects.equals(code, value.getCode())) {
return value.getFields();
}
}
return null;
}
}
客户端代码
public class TestEnum {
public static void main(String[] args) {
//高雅版
JSONObject jsonObject = new JSONObject();
//传入code,获取fields
List<String> fieldsByCode = DataEnum.getFieldsByCode(1);
assert fieldsByCode != null;
fieldsByCode.forEach(x->{
jsonObject.put(x,"test");
});
System.out.println(jsonObject);
}
}
完成的功能和上面的一样,可是咱们发现TestEnum
代码里边一条if语句都没有也,这时,即便code增加了,咱们也只需求保护枚举类里边的代码,压根不用在TestEnum
里边增加if语句,是不是很高雅
小总结
上面的案例中,第一个版本仅仅只是能完成功能,可是当发生变化时难以保护,代码里边有大量的if语句,看着也比较臃肿,后边的人来保护时,也只能不断的增加if语句,而第二个版本巧用枚举类的办法,用一个通用的获取fields的办法,咱们的TestEnum
代码就变得适当高雅了
结语
谢谢你的阅览
,由于作者水平有限,不免有不足之处,若读者发现问题,还请批评,在留言区留言或许私信告知,我一定会赶快修改的。若各位大佬有什么好的解法,或许有意义的解法都可以在谈论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!
作者:小常识
CSDN个人主页:后端小常识
GZH:后端小常识
欢迎关注点赞保藏⭐️留言