Java if-else 多重嵌套的优化

本文探讨了if-else多重嵌套带来的问题,并提出了两种优化方案:一是利用Map缓存,将多个条件整合为单一键值对,简化逻辑;二是采用switch结构,合并条件判断,提升代码可读性和维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. if-else 多重嵌套的问题

项目重构发现代码中存在类似以下的三重 if-else 嵌套代码,其中变量 a、b、c有三种可能的取值,组合起来共有27 个分支,这还没有算上对各个变量进行合法性校验失败的分支。如此繁杂琐碎的代码阅读起来有多费劲可想而知,而条件判断太多对理解业务逻辑也是个问题,更不用提之后的扩展维护

if (a == 1) {
    if (b == 1) {
        if (c == 1) {

        } else if (c == 2) {

        } else if (c == 3) {

        } else {

        }
    } else if (b == 2) {

    }
    ......
        
} else if (a == 2) {
  ......
}       

2. 解决方案

条件判断嵌套过多的害处毋庸多言,仔细思索后大致整理了优化思路,首要点是将多重条件判断进行整合如以上例子中对 3 个变量的取值逐一判断来确定一条分支其实可以优化为以 3 个变量聚合为一个条件进行分支确定,这样分支数并不会减少,但是对条件的判断必然是更为清晰的

2.1 使用 Map 缓存

基于以上例子,变量 a、b、c都是整数类型的数据,则可以考虑将其合并为一个String 数据,以字符串"111" 来表示 a=1, b=1, c=1 的条件,这样可以用一个 Map 结构来存储对应操作标识,从而实现策略切换。这种方式通常会另外新建一个工具类,通过工具类来获取对应条件的结果

public static Map<String, MatchVerifyResultDTO> getInstance() {
        if (upCreditMap.isEmpty()) {
            MatchVerifyResultDTO invalidResult = new MatchVerifyResultDTO(false,
                    MatchVerifyEnum.MVC_UP_CREDIT_ERR.getCode());
            MatchVerifyResultDTO validResult = new MatchVerifyResultDTO(true, MatchVerifyEnum.MVC_PASS.getCode());

            upCreditMap.put("111", invalidResult);
            upCreditMap.put("112", validResult);
            upCreditMap.put("113", validResult);
          ......
        }
        return upCreditMap;
    }

2.2 switch 简化条件

如果不准备新建工具类来实现条件简化,也可以采用 switch结构。不过不管何种方式,核心思想是不变的,即采用整体数据来消弭小的差异判断,此处依然将变量 a、b、c合并为一个String 特征条件

switch(attribute) {
     case "111":
     case "112":
         handleTargetMessage();
         break;
         
     ......
     
     default:
         log.error("Not supported attribute!")
           break;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值