实际开发过程中经常遇到很多的条件判断,一层一层,对于有强迫症的我来说,很不习惯
本文通过枚举来解决,废话不多说,代码里面已经有详细注释了
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 问题了,亲,记得送上一个免费的赞哟 !!
网友评论