美文网首页
利用枚举类解决过多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