避免过多使用if-else的方法很多,而我推荐这种

 

在平时的开发中都会必不可少的用if-else判断逻辑,像以下这种,当判断只有一两层的时候还好,三层以上就看有着有些别扭了,如果判断越来越多,就会变成一个难维护的问题了。

if("RED".equals(color)){
   // do something
}else if("GREEN".equals(color)){
    // do something
}else if("BLUE".equals(color)){
    // do something
}

 

经过一番摸索和总结,发现可以通过以下几种方式来进行优化,使得代码更加优雅、更加有逼格:

  1. 对于只有两层判断的可以使用三元运算符来消除;

     2、使用switch语句。这种方式其实只是换种写法而已,实际上并没有优化多少。不过当判断层数多的时候倒是switch写法的效率高一些 ;

     3、使用Map结合多态模式。这种方式的简单思路就是定义一个接口,在实现该接口的不同类里面来放if-else中不同分支动作,然后用一个map来管理,如下:

Map<String, IColor> map = new HashMap<String, IColor>();
map.put("RED",new RedImpl());
map.put("BLUE",new BlueImpl());
map.put("Green",new GreenImpl());
// 消除if-else用法
map.get(color).doSomething();

 

    4、使用函数式编程。这种方法原理上跟3是一样的,只是这种方法的分支动作采用了Java8中新特性函数式编程来实现,避免了3中每个分支动作一个实现类的写法。

// 维护if-else分支动作
Map<String, IColor> colorMap = new HashMap<>();
colorMap.put("RED", () -> {
    System.out.println("这里执行RED对应的逻辑...");
});
colorMap.put("BLUE", () -> {
    System.out.println("这里执行BLUE对应的逻辑...");
});
colorMap.put("GREEN", () -> {
    System.out.println("这里执行GREEN对应的逻辑...");
});
// 消除if-else用法
colorMap.get(color).doSomething();

    5、枚举方式实现,也是个人推荐使用的一种。各分支的状态存放在一个枚举当中,并且使用对应的方法来实现各个状态对应的逻辑,具体如下

public enum ColorEnum {
    RED{
        @Override
        public void doSomething() {
            System.out.println("这里执行RED对应的逻辑...");
        }
    },
    BLUE{
        @Override
        public void doSomething() {
            System.out.println("这里执行BLUE对应的逻辑...");
        }
    },
    GREEN{
        @Override
        public void doSomething() {
            System.out.println("这里执行GREEN对应的逻辑...");
        }
    };


    public abstract void doSomething();
}

然后应用时消除if-else的写法就可以像下面这样:

ColorEnum.valueOf(color).doSomething();

 

好了,代码中消除if-else或者优雅方式实现分支判断流程的就介绍了这几种。其实真正的项目中的场景是灵活多变的,有空值判断的、状态判断的、范围判断等场景,没有哪一种是最好的,只有针对具体场景才能确定的更合适的写法,所以我们都要了解多一些,才能让我们的代码更具有可读性、扩展性。

 

如果觉得文章对你有点帮助,欢迎微信关注【白话Java】,让我们一起成长吧!

回复“8080”有Java经典喔

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值