美文网首页
利用枚举类解决过多if-else问题

利用枚举类解决过多if-else问题

作者: 一个忙来无聊的人 | 来源:发表于2019-10-14 17:35 被阅读0次

    实际开发过程中经常遇到很多的条件判断,一层一层,对于有强迫症的我来说,很不习惯
    本文通过枚举来解决,废话不多说,代码里面已经有详细注释了

    PS:码字不易,欢迎摘抄,希望对你有一点点帮忙动动鼠标帮忙点个赞(免费的)就是我前进动力

    1、先上核心代码 枚举类判断

    package com.example.demo.util;
    
    import lombok.AllArgsConstructor;
    import lombok.Getter;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @Date: 2019/10/14 16:27
     * @Desc: 利用枚举类过滤过多if else
     */
    @Getter
    @AllArgsConstructor
    public enum EnumTestDemo {
        /**
         * 第一个枚举类类型
         * 当调用 EnumTestDemo.getMethodByType(1)
         */
        FIRST_ENUM(1) {
            @Override
            public void verify(Demo demo, boolean bool) {
                if (bool){
                    demo.setName("张1");
                }else {
                    demo.setName("落叶的施舍1");
                }
            }
        },
        /**
         * 第二个枚举类类型及逻辑
         */
        SECOND_ENUM(2) {
            @Override
            public void verify(Demo demo, boolean bool) {
                if (bool){
                    demo.setName("张2");
                }else {
                    demo.setName("落叶的施舍2");
                }
            }
        },
        /**
         * 第三个枚举类类型及逻辑
         */
        THIRD_ENUM(3) {
            @Override
            public void verify(Demo demo, boolean bool) {
                if (bool){
                    demo.setName("张3");
                }else {
                    demo.setName("落叶的施舍3");
                }
            }
        },
        ;
    
        // 定义枚举类的判断条件类型
        private final Integer type;
        // 定义一个静态map 加载类时首先既初始化,执行步骤一
        private static Map<Integer, EnumTestDemo> map = new HashMap<>();
    
        /**
         * 静态代码块,根据类加载顺序,仅在静态变量后进行加载,在步骤一之后进行加载
         */
        static {
            for (EnumTestDemo demo : EnumTestDemo.values()) {
                map.put(demo.getType(), demo);
            }
        }
    
        /**
         * 根据类型查找对应的枚举类
         *
         * @param type
         * @return
         */
        public static EnumTestDemo getMethodByType(Integer type) {
            // 此处根据自己代码中的类型判断进行判断,是否有相应的枚举,本文限制类型只能为1-3
            if (type > 3 || type < 0) {
                // 下面是自定义异常,也可以根据需求自定义实现业务
                throw new BusinessException("999999", "不支持的类型type:" + type);
            }
            return map.get(type);
        }
    
        /**
         * 自定义枚举中请求参数类型信息及数量信息
         * 参数的数量以及参数的类型均可根据需要自定义
         * @param demo
         * @param bool
         */
        public abstract void verify(Demo demo, boolean bool);
    }
    
    

    2、代码中用到的demo 类

    package com.example.demo.util;
    import lombok.Data;
    /**
     * @Date: 2019/10/14 16:24
     * @Desc: 传的可以是一个Object对象
     */
    @Data
    public class Demo {
        private String name;
        private String sex;
        private Integer type;
    }
    
    

    3、实际测试类

    package com.example.demo.util;
    
    /**
     * @Date: 2019/10/14 17:17
     * @Desc: 测试类
     */
    public class TestEnum {
    
        public static void main(String[] args) {
            Demo demo = new Demo();
            // 直接调用赋值 (实际业务逻辑根据需要自己改)
            EnumTestDemo.getMethodByType(1).verify(demo, false);
            System.out.println("当type为1且bool为false时名字为:" + demo.getName()); //当type为1且bool为false时名字为:落叶的施舍1
    
           demo = new Demo();
            // 直接调用赋值 (实际业务逻辑根据需要自己改)
            EnumTestDemo.getMethodByType(2).verify(demo, true);
            System.out.println("当type为2且bool为true时名字为:" + demo.getName()); // 当type为2且bool为true时名字为:张2
        }
    }
    

    4、最后给下maven依赖吧,主要是现在很多项目都没有依赖lombok,方便直接使用

         <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.18</version>
            </dependency>
    

    好了,到此已经完美解决过多if else 问题了,亲,记得送上一个免费的赞哟 !!

    相关文章

      网友评论

          本文标题:利用枚举类解决过多if-else问题

          本文链接:https://www.haomeiwen.com/subject/doarmctx.html