当前位置: 首页 > article >正文

巧用枚举消除条件判断

shigen坚持更新文章的博客写手,记录成长,分享认知,留住感动。个人IP:shigen

在上一篇的文章结合HashMap与Java 8的Function和Optional消除ifelse判断中有讲到如何结合HashMap与Java 8的Function和Optional消除ifelse判断,相关的文章可以点击链接查看,这里做一些小小的改造,将不同的处理方式抽成一个方法,最终的代码是这样的:

改造之后的代码

是不是看起来更加规范和清晰了。今天讲的就是通过枚举实现if-else的消除,先上代码:

  • 定义的枚举类
    public enum QuestionHandlerEnum {
        A() {
            @Override
            String handle(String detail) {
                return handleQuestionA(detail);
            }
        },
        B() {
            @Override
            String handle(String detail) {
                return handleQuestionB(detail);
            }
        },
        C() {
            @Override
            String handle(String detail) {
                return handleQuestionC(detail);
            }
        },
        ;

        abstract String handle(String detail);

        public static String handleQuestionV3(String type, String detail) {
            return Optional.of(QuestionHandlerEnum.valueOf(type)).map(handlerEnum -> handlerEnum.handle(detail)).orElseThrow(() -> new IllegalArgumentException("invalid type: " + type));
        }
    }
  • 测试一下
assert QuestionHandlerEnum.handleQuestionV3("B", "detail").equals("call methodB to handledetail");

没错,就是这种写法,这么的简单。

这是看的阿里大佬的写法,将方法内聚在抽象方法和枚举中,大大简化代码,提升功能的统一和内聚。

这种写法在实际的开发中,相信大家也很少用到,但是也有对应的场景的,shigen当时看到这种写法也是看大佬们给出的实现加减乘除的案例中学到的。

最后附上代码截图:

枚举类消除if-else代码截图

与shigen一起,每天不一样!


http://www.kler.cn/a/325085.html

相关文章:

  • Java-异步方法@Async+自定义分布式锁注解Redission例子
  • 十二:HTTP错误响应码:理解与应对
  • Java基础-组件及事件处理(中)
  • Excel SUMIFS
  • 【MQTT.fx 客户端接入 阿里云平台信息配置】
  • 大模型论文精华-AI在医疗诊断、语言学习与情绪识别等领域的最新应用进展
  • ETH以太网资源学习
  • 【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差
  • 学习react小记
  • 独孤思维:又取关了一批副业博主,真相扎心了
  • 区块链媒体推广:15个数字解读未来-华媒舍
  • 代码随想录算法训练营day41
  • 周家庄智慧旅游小程序
  • Excel-统计日期内的个数1月到12月
  • 研究生如何利用ChatGPT帮助开展日常科研工作?
  • Linux---文件io
  • delphi制作漂亮的农历窗体(IntraWeb+Layui的完美结合)
  • 【设计模式-中介者模式】
  • EHS管理系统设备安全设施安全监控模块
  • 用manim实现有想法的Pi
  • 能力成熟度模型集成(CMMI)
  • c# 结构体反射赋值问题 结构体 反射赋值
  • 百度智能体创建:情感领域的创新力量
  • 大模型训练:K8s 环境中数千节点存储最佳实践
  • 车辆零部件检测和分割数据集-车体数据集-yolo格式-yolov5-yolov10可用
  • docker-图形化工具-portainer的使用