9条消除if...else的锦囊妙计,助你写出更优雅的代码(下)

简介: 9条消除if...else的锦囊妙计,助你写出更优雅的代码(下)

正文


二、消除if...else的锦囊妙计


6、其他的消除if...else的方法


当然实际项目开发中使用if...else判断的场景非常多,上面只是其中几种场景。下面再列举一下,其他常见的场景。


1.根据不同的数字返回不同的字符串


public String getMessage(int code) {  
     if (code == 1) {  
        return"成功";  
     } elseif (code == -1) {  
        return"失败";  
     } elseif (code == -2) {  
        return"网络超时";  
     } elseif (code == -3) {  
        return"参数错误";  
     }  
     thrownew RuntimeException("code错误");  
}


其实,这种判断没有必要,用一个枚举就可以搞定。


publicenum MessageEnum {  
     SUCCESS(1, "成功"),  
     FAIL(-1, "失败"),  
     TIME_OUT(-2, "网络超时"),  
     PARAM_ERROR(-3, "参数错误");  
     privateint code;  
     private String message;  
     MessageEnum(int code, String message) {  
         this.code = code;  
         this.message = message;  
     }  
     public int getCode() {  
        returnthis.code;  
     }  
     public String getMessage() {  
        returnthis.message;  
     }  
     public static MessageEnum getMessageEnum(int code) {  
        return Arrays.stream(MessageEnum.values()).filter(x -> x.code == code).findFirst().orElse(null);  
     }  
}


再把调用方法稍微调整一下


public String getMessage(int code) {  
     MessageEnum messageEnum = MessageEnum.getMessageEnum(code);  
     return messageEnum.getMessage();  
}

完美。


2.集合中的判断


上面的枚举MessageEnum中的getMessageEnum方法,如果不用java8的语法的话,可能要这样写

public static MessageEnum getMessageEnum(int code) {  
     for (MessageEnum messageEnum : MessageEnum.values()) {  
         if (code == messageEnum.code) {  
            return messageEnum;  
         }  
     }  
     returnnull;  
}

对于集合中过滤数据,或者查找方法,java8有更简单的方法消除if...else判断。

public static MessageEnum getMessageEnum(int code) {  
     return Arrays.stream(MessageEnum.values()).filter(x -> x.code == code).findFirst().orElse(null);  
}


3.简单的判断


其实有些简单的if...else完全没有必要写,可以用三目运算符代替,比如这种情况:


public String getMessage2(int code) {  
     if(code == 1) {  
        return"成功";  
     }  
     return"失败";  
}


改成三目运算符:


public String getMessage2(int code) {  
    return code == 1 ? "成功" : "失败";  
}

修改之后代码更简洁一些。


4.spring中的判断


对于参数的异常,越早被发现越好,在spring中提供了Assert用来帮助我们检测参数是否有效。

public void save(Integer code,String name) {  
     if(code == null) {
       throw Exception("code不能为空");     
     } else {
         if(name == null) {
             throw Exception("name不能为空");     
         } else {
             System.out.println("doSave");
         }
     }
 }


如果参数非常多的话,if...else语句会很长,这时如果改成使用Assert类判断,代码会简化很多:


public String save2(Integer code,String name) {      
     Assert.notNull(code,"code不能为空"); 
     Assert.notNull(name,"name不能为空"); 
     System.out.println("doSave");
 }


当然,还有很多其他的场景可以优化if...else,我再这里就不一一介绍了,感兴趣的朋友可以给我留言,一起探讨和研究一下。

相关文章
|
8月前
|
SQL Java 数据库连接
了解ORM
MyBatis与MyBatis-Plus区别在于:MyBatis是半自动ORM框架,需手动编写SQL,适合复杂查询场景;而MyBatis-Plus是其增强工具,提供零SQL的CRUD操作,简化开发流程,适用于简单增删改查场景,提升开发效率。
|
算法 测试技术 vr&ar
Unity Vufoia+AR模型抖动的问题
**图像识别与跟踪精度问题**:Vuforia 依赖特征点检测,环境光线不稳定、目标纹理不丰富或遮挡会导致特征点匹配误差,引起AR模型抖动。跟踪丢失和重定位延迟也会导致模型不稳定。 **设备硬件与性能问题**:移动设备摄像头易受手持抖动影响,低性能设备无法及时处理图像数据,导致跟踪结果更新延迟。 **模型与坐标系问题**:AR模型重心设置不合理或坐标系转换误差,会使模型在虚拟空间中不稳定。 **算法与参数设置问题**:跟踪算法局限性和参数设置不合理(如灵敏度过高或平滑度过低)都会影响跟踪稳定性。 。
|
存储 关系型数据库 MySQL
给用户赋予权限GRANT语句
【6月更文挑战第20天】给用户赋予权限GRANT语句。
536 1
|
机器学习/深度学习 人工智能 测试技术
O1-CODER:北交大推出的O1代码版开源项目,专注于编码任务
O1-CODER是由北京交通大学研究团队推出的开源项目,专注于编码任务。该项目结合强化学习和蒙特卡洛树搜索技术,提升模型的System-2思维能力,旨在生成更高效、逻辑性更强的代码。
439 24
O1-CODER:北交大推出的O1代码版开源项目,专注于编码任务
|
监控 数据可视化 搜索推荐
评测:如何通过高效的工具制定清晰的会务日程安排与任务清单?
随着2024年的到来,全球会议和活动安排日益重要。有效的会务日程管理工具不仅能提升工作效率,还能确保活动顺利进行。本文推荐六款适合2024年的会务日程安排工具:板栗看板、Trello、Asana、Monday.com、Microsoft Planner和ClickUp,分别介绍它们的功能、特点和适用场景,帮助您找到最合适的工具。
评测:如何通过高效的工具制定清晰的会务日程安排与任务清单?
|
算法 Unix Linux
深入理解Linux内核调度器:原理与优化
本文探讨了Linux操作系统的心脏——内核调度器(Scheduler)的工作原理,以及如何通过参数调整和代码优化来提高系统性能。不同于常规摘要仅概述内容,本摘要旨在激发读者对Linux内核调度机制深层次运作的兴趣,并简要介绍文章将覆盖的关键话题,如调度算法、实时性增强及节能策略等。
|
存储 测试技术 持续交付
|
安全 关系型数据库 MySQL
openvas报错Warning: Secinfo Database Missing SCAP and/or CERT database missing on OMP server.
openvas报错Warning: Secinfo Database Missing SCAP and/or CERT database missing on OMP server.
|
算法 搜索推荐 数据挖掘
如何搭建数据指标体系
【2月更文挑战第21天】
|
存储 缓存 NoSQL
Redis的高可用实现方案:哨兵与集群
Redis的高可用实现方案:哨兵与集群
436 1

热门文章

最新文章