巧用枚举消除条件判断

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一起,每天不一样!

相关推荐
一只会写代码的猫19 分钟前
面向高性能计算与网络服务的C++微内核架构设计与多线程优化实践探索与经验分享
java·开发语言·jvm
萤丰信息1 小时前
智慧园区能源革命:从“耗电黑洞”到零碳样本的蜕变
java·大数据·人工智能·科技·安全·能源·智慧园区
曹牧2 小时前
Eclipse为方法添加注释
java·ide·eclipse
我叫张小白。2 小时前
Spring Boot拦截器详解:实现统一的JWT认证
java·spring boot·web·jwt·拦截器·interceptor
Gerardisite4 小时前
如何在微信个人号开发中有效管理API接口?
java·开发语言·python·微信·php
闲人编程5 小时前
Python的导入系统:模块查找、加载和缓存机制
java·python·缓存·加载器·codecapsule·查找器
故渊ZY5 小时前
Java 代理模式:从原理到实战的全方位解析
java·开发语言·架构
匿者 衍5 小时前
POI读取 excel 嵌入式图片(支持wps 和 office)
java·excel
一个尚在学习的计算机小白6 小时前
java集合
java·开发语言
IUGEI6 小时前
synchronized的工作机制是怎样的?深入解析synchronized底层原理
java·开发语言·后端·c#