巧用枚举消除条件判断

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

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

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

  • 定义的枚举类
java 复制代码
    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));
        }
    }
  • 测试一下
java 复制代码
assert QuestionHandlerEnum.handleQuestionV3("B", "detail").equals("call methodB to handledetail");

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

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

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

最后附上代码截图:

与shigen一起,每天不一样!

相关推荐
user_admin_god18 小时前
第 10 篇:拼上下文与生成——预算、边界与防幻觉
java·人工智能·spring boot·语言模型
用户31268748772018 小时前
GC 算法与垃圾收集器演进:从 Serial 到 ZGC
java
天天被压力19 小时前
【别再到处找免费股票数据API了:官方204个接口,32篇一次讲透 #02】涨停跌停与特色股池:5类股池接口一次拉全
java·人工智能·python
斯维赤19 小时前
从 @Tool 到 Agent 流水线:LangChain4j 进阶教学,一个库打全套
java·后端
SimonKing19 小时前
SSE项目`nexus-sse`持续优化,不一样的视觉效果
java·后端·程序员
斑鸠喳喳19 小时前
读写锁模式 Read-Write Lock
java·后端
信誓旦旦的程序猿20 小时前
【Python 量化取数指南 #09】Python 拿港股通数据:港股通成交与港股财报实测
java·python·股票数据api·股票数据·股票数据api接口·股票api数据接口·股票量化数据api
小程序设计20 小时前
本科毕设避坑|大数据 / 单片机物联网 / 网络工程 / PLC / 机械设计选题与落地心得
java·hive·hadoop·单片机
卓怡学长20 小时前
w206基于SpringBoot的社区团购小程序设计与实现
java·spring boot·spring·intellij-idea
IT枫斗者枫哥1 天前
MyBatis一对多分页:LIMIT 20,为什么凑不齐20个订单?
java·数据库