【阿昌之丑陋代码优化】多分类if-else判断

153 阅读2分钟

前言

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

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

举个栗子: ↓ ・∀・)

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

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

//根据类型,获取对应的分类名
public String findTypeName(Integer type){
    if (type==1){
        return "可回收物";
    }
    if (type==2){
        return "其他垃圾";
    }
    if (type==3){
        return "厨余垃圾";
    }
    if (type==4){
        return "有害垃圾";
    }
    return "";
}

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


正文

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

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枚举类中增加对应的枚举项就好,比如干垃圾/湿垃圾

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

    //....省略细节
}

测试

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wvs76Dv7-1640314017555)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211224104624818.png)]


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