使用枚举加Function(Java8)优化if else语句 您所在的位置:网站首页 enum语句 使用枚举加Function(Java8)优化if else语句

使用枚举加Function(Java8)优化if else语句

2024-07-10 15:14| 来源: 网络整理| 查看: 265

可能在不自觉时,代码中就出现了很多的if和else语句,可能像下图一样 在这里插入图片描述 当然可能没有这么夸张,但是我见过比这还夸张的代码。网上有很多优化if else语句的方法,常用的我就不提了。这次主要是之前看EffectJava时,当时有一张对枚举讲的很是详细,结合Java8的function接口,感觉这也是优化if else判断的一个方案。 下面是代码:

/** * @author wangli66 */ public enum DeSensionEnum { /** 中文名 */ // Function 的 R apply(T t); CHINESE_NAME("CHINESE_NAME",(str)->{ return str.toString().substring(0,1) + "**"; }), /** 用户ID */ USER_ID("USER_ID",(str)->{ return str.toString().substring(0,1) + "**"; }), /** 身份证号 */ ID_CARD("ID_CARD",(str)->{ return str.toString().substring(0, str.toString().length() - 4) + "****"; }), private String name; /*脱敏方式*/ private Function deSensive; /** * 私有构造器 * @param name * @param deSensive */ private DeSensionEnum(String name,Function deSensive) { this.name = name; this.deSensive = deSensive; } public String getName() { return name; } /** * 应用 * @param message * @return */ public String getMsg(String message) { // 我是为了演示方便写到这里了,实际上你可以在用的地方apply也行 return deSensive.apply(message); } }

测试代码

/** * @author wangli66 */ public class TestEnumY { public static void main(String[] args) { String name = "ID_CARD"; String id = "3123456789123456"; // 获取到ID_CARD对应的脱敏方法的枚举 DeSensionEnum deSensionEnum = DeSensionEnum.valueOf(name); if(deSensionEnum != null) { // 脱敏 String msg = deSensionEnum.getMsg(id); System.out.println("脱敏后的数据:"+msg); } } } // 结果 // 脱敏后的数据:312345678912****

另外不得不说的是:

// 即使以后你又增加了其他的脱敏数据类型,我直接加下枚举,并实现下脱敏方法就行了, // 主体的代码逻辑根本不需要去改变。 // 枚举的类型限制挺好的,能保证你传参正确性,要么枚举类型,要么null,也能减少不必要的判断代码。

看到这里,聪明的同学你可能灵光一闪。 在这里插入图片描述 搞什么啊,这不就是KV键值对嘛,我大map肯定也能这么做,是的,你猜对了。

// 和使用枚举的原理一样,key使用方法名,value使用接口,也可以达到这种效果。 // 下面上代码 /** * @author wangli66 */ public class TestEnumMap { public static void main(String[] args) { // 初始化map Map functionMap = new HashMap(); functionMap.put("CHINESE_NAME",(str)->{ return str.toString().substring(0,1) + "**";}); functionMap.put("USER_ID",(str)->{ return str.toString().substring(0,1) + "**";}); functionMap.put("ID_CARD",(str)->{ return str.toString().substring(0, str.toString().length() - 4) + "****";}); // 测试 String name = "ID_CARD"; String id = "3123456789123456"; // 拿到对应的方法,进行应用 Function function = functionMap.get(name); String msg = function.apply(id); System.out.println("脱敏后的数据:"+msg); } } // 结果 // 脱敏后的数据:312345678912****

不管是用哪一种方式,能够优化代码就可以了。使用Map这种方式时建议做成全局的。 欢迎指正,以及跪求三连一波!!!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有