【阿昌之丑陋代码优化】多分类if-else判断
阿昌 Java小菜鸡
## 前言

兄弟姐妹好 ๑•̀ㅂ•́)و!!!

感谢你能看这一次阿昌分享的阿昌之丑陋代码优化小记录,这次记录分享的,多分类if-else判断。在我们业务之中,会有很多情况的多分类if-else判断

举个栗子: ↓ ・∀・)

如要用某个字段为type来区分是哪种类型的垃圾,1可回收物,2其他垃圾,3厨余垃圾,4有害垃圾

这4种情况,像阿昌这种菜鸡会第一时间想到if-else去判断,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//根据类型,获取对应的分类名
public String findTypeName(Integer type){
if (type==1){
return "可回收物";
}
if (type==2){
return "其他垃圾";
}
if (type==3){
return "厨余垃圾";
}
if (type==4){
return "有害垃圾";
}
return "";
}

但是如果业务量类型大了之后,倘若要加新的分类,比如干垃圾/湿垃圾,那就需要在使用到这里的代码处都需要修改,这样子就产生了大量的耦合 ⊙▽⊙),会改麻了!!!


正文

那阿昌这里就记录分享一个方法,可以去解决这种问题。通过Enum枚举类,代码如下:↓

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public enum TypeEnum {
RECYCLABLE(1,"可回收物"),
OTHER_WASTE(2,"其他垃圾"),
KITCHEN_WASTE(3,"厨余垃圾"),
HARMFUL_WASTE(4,"有害垃圾");

@Getter//lombok
private final Integer typeCode;
@Getter//lombok
private final String typeName;
TypeEnum(Integer typeCode,String typeName){
this.typeCode=typeCode;
this.typeName=typeName;
}

//对外暴露直接查找对应name的方法
public static String findTypeNameByCode(Integer typeCode){
TypeEnum[] values = TypeEnum.values();
for (TypeEnum value : values) {
Integer originCode = value.getTypeCode();
if (originCode.equals(typeCode)){
return value.getTypeName();
}
}
return "";
}
}

这样子就可以直接通过遍历的方式进行获取,虽然他还是依然还进行if-else,但是这样子做会让我们修改代码变的方便了,只需要在这个Enum枚举类中增加对应的枚举项就好,比如干垃圾/湿垃圾

1
2
3
4
5
6
7
8
9
10
public enum TypeEnum {
RECYCLABLE(1,"可回收物"),
OTHER_WASTE(2,"其他垃圾"),
KITCHEN_WASTE(3,"厨余垃圾"),
HARMFUL_WASTE(4,"有害垃圾"),
DRY_WASTE(5,"干垃圾"),
WET_WASTE(6,"湿垃圾");

//....省略细节
}

测试

1
2
3
public static void main(String[] args) {
System.out.println(TypeEnum.findTypeNameByCode(5));
}

image


那么以上就是这次记录的全部内容,感谢你能看到这里!!! (•‾̑⌣‾̑•)✧˖°

 请作者喝咖啡