巧用枚举替代if

简介: 巧用枚举替代if

前言

亲爱的友友们,我们今天来看一下如何巧妙利用枚举来替代if语句

能实现功能的代码千篇一律,但优雅的代码万里挑一

业务背景

在coding中遇到一个需求,经过简化后就是:需要根据不同的code值,处理逻辑,然后返回对应的对象。

我就简答举个栗子哈💬

根据 不同的code,返回不同的对象

传1 返回 一个对象,包含属性:name、age ; 传2,返回一个对象,包含属性name ; 传3,返回一个对象,包含属性sex …

字段值默认为 test

思路

摇头版

public class TestEnum {
    public static void main(String[] args) {
        Integer code = 1;//这里为了简单,直接这么写的,实际情况一般是根据参数获取
        JSONObject jsonObject = new JSONObject();
        if(Objects.equals(0,code)){
            jsonObject.fluentPut("name", "test").fluentPut("age", "test");
            System.out.println("jsonObject = " + jsonObject);
        }
        if(Objects.equals(1, code)){
            jsonObject.fluentPut("name", "test");
            System.out.println("jsonObject = " + jsonObject);
        }
        if(Objects.equals(2,code)){
            jsonObject.fluentPut("sex", "test");
            System.out.println("jsonObject = " + jsonObject);
        }
    }
}

上面的代码在功能上是没有问题滴,但是要扩展的话就💘,比如 当code为4时,ba la ba la,我们只有再去写一遍if语句,随着code的增加,if语句也会随之增加,后面的人接手你的代码时 💔

优雅版

我们首先定义一个枚举类,维护对应Code需要返回的字段

@Getter
@AllArgsConstructor
public enum DataEnum {
    /**
     * 枚举类
     */
    CODE1(1,new ArrayList<>(Arrays.asList("name","age"))),
    CODE2(2,new ArrayList<>(Arrays.asList("name"))),
    CODE3(3,new ArrayList<>(Arrays.asList("sex")))
    ;
    private Integer code;
    private List<String> fields;
  //传入code 即可获取对应的 fields
    public static List<String> getFieldsByCode(Integer code){
        DataEnum[] values = DataEnum.values();
        for (DataEnum value : values) {
            if(Objects.equals(code, value.getCode())) {
                return value.getFields();
            }
        }
        return null;
    }
}

客户端代码

public class TestEnum {
    public static void main(String[] args) {
        //优雅版
        JSONObject jsonObject = new JSONObject();
        //传入code,获取fields
        List<String> fieldsByCode = DataEnum.getFieldsByCode(1);
        assert fieldsByCode != null;
        fieldsByCode.forEach(x->{
           jsonObject.put(x,"test");
        });
        System.out.println(jsonObject);
    }
}

实现的功能和上面的一样,但是我们发现TestEnum代码里面一条if语句都没有也,这时,即使code增加了,我们也只需要维护枚举类里面的代码,压根不用在TestEnum里面添加if语句,是不是很优雅😎

小总结

【Tips】我们在写代码时,一定要考虑代码的通用性

上面的案例中,第一个版本仅仅只是能实现功能,但是当发生变化时难以维护,代码里面有大量的if语句,看着也比较臃肿,后面的人来维护时,也只能不断的添加if语句,而第二个版本巧用枚举类的方法,用一个通用的获取fields的方法,我们的TestEnum代码就变得相当优雅了😎

结语


相关文章
|
6月前
|
Java Spring
使用枚举定义常量更好点儿
使用枚举定义常量更好点儿
|
6月前
|
安全 算法 编译器
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
【C++基础语法 枚举】C/C++ 中enum枚举量的介绍:介绍enum枚举量在C/C中的作用和使用方法
76 2
|
2月前
|
Java
巧用枚举消除条件判断
`shigen`是一位致力于撰写博客文章的作者,记录个人成长历程,分享真知灼见,并捕捉生活中的感动瞬间。在其最新文章中,通过枚举的方式展示了如何优雅地消除if-else判断,提供了一种更为简洁清晰的代码实现方案。利用自定义的`QuestionHandlerEnum`枚举类,实现了不同情况下的逻辑处理,展示了此方法在提升代码可读性和内聚性上的优势。与`shigen`一同探索编程之美,让每一天都有所进步。个人IP:shigen。
13 0
巧用枚举消除条件判断
|
6月前
|
编译器 数据安全/隐私保护 C++
C++系列十六:枚举
C++系列十六:枚举
|
11月前
|
算法 测试技术 C#
C++二分查找算法:132模式枚举3简洁版
C++二分查找算法:132模式枚举3简洁版
|
11月前
|
算法 程序员 C#
C++二分查找算法:132 模式枚举3
C++二分查找算法:132 模式枚举3
|
JavaScript 前端开发 API
📕 重学JavaScript:判断数组中包含哪些值有什么好方法?
你有没有遇到过这样的问题:你想要判断一个数组中包含哪些值,但是却不知道改用什么方法就直接用for循环遍历?🤔
93 0
枚举时对数组操——三刷AcWing 95. 费解的开关
枚举时对数组操——三刷AcWing 95. 费解的开关
64 0
C语言——enum枚举实例、知识点。使用枚举,减少相同定义步骤,简洁数据1.1.5
枚举是C语言常见的一种基本数据类型,它可以避免多个整数定义的麻烦,使代码整洁干净易读如此一看,就觉得繁琐无比,大量重复#define xx明显增加代码量,且数值需自己一一对应而枚举,可以解决这种定义连续数值的过程当变量第一个值未自定义时,第一个枚举成员的默认值则为整型0,后续成员值依次加1,如此时MON=0,TUE=1,WED=2·····.........
C语言——enum枚举实例、知识点。使用枚举,减少相同定义步骤,简洁数据1.1.5
|
安全 Java 编译器
语法糖甜不甜?巧用枚举实现“状态”转换限制
语法糖甜不甜?巧用枚举实现“状态”转换限制
186 0
语法糖甜不甜?巧用枚举实现“状态”转换限制