巧用枚举消除条件判断

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

相关推荐
evans在进步21 小时前
LeetCode 394:字符串解码——Java 单栈模拟与嵌套解析详解
java·python·leetcode
m0_547486661 天前
《Java程序设计与实践 》全套PPT课件2026
java·开发语言
土司大王1 天前
LeetCode hto100——字母异位词分组
java·算法·leetcode
码匠许师傅1 天前
【C++ 面试真题】聊聊 C++ 中的 lambda 表达式
java·c++·面试
QCodingDev1 天前
Spring AI Alibaba ReAct Agent实战:从Tool Calling到Agent,企业AI复杂业务该如何设计?
java·人工智能·agent·ai编程·spring ai
RainCity1 天前
Java Swing 自定义组件库分享(十六)
java·笔记·后端
赵广陆1 天前
企业实战:Markdown图片检索
android·java·开发语言
C++、Java和Python的菜鸟1 天前
第3章 从0开始用若依
java·开发语言
Json____1 天前
五金制品行业-企业官网源码
java·大数据·数据库·企业站·wwwoop.com
counting money1 天前
Spring AI Alibaba 从入门到实战:构建企业级 AI 应用
java·人工智能·spring