Java优化if-else代码几个解决方案

摘要:
前言开发系统一些状态,比如订单状态:数据库存储是数字或字母,但是需要显示中文或英文,一般用到if-else代码判断,但这种判断可读性比较差,也会影响后期维护,也比较容易出现bug。intstatus;map.get;由value获取key使用map遍历:intstatus;for{if{status=vo.getKey();break;}}优点:状态值不限制数字缺点:占用空间大解决方案三、枚举先定义一个枚举类publicenumTestEum{agree,refuse;privateintcode;privateStringcapation;TestEum{this.code=code;this.capation=capation;}publicintgetCode(){returncode;}publicStringgetCapation(){returncapation;}Stringof{for{if{returntestEum.getCapation();}}returnnull;}}有了枚举以后,if-else代码块可以优化成一行代码StringstatusStr=TestEum.of;总结如果通过数字获取描述,使用数组即可。

前言

开发系统一些状态,比如订单状态:数据库存储是数字或字母,但是需要显示中文或英文,一般用到if-else代码判断,但这种判断可读性比较差,也会影响后期维护,也比较容易出现bug。比如:
假设状态对应关系:1:agree 2:refuse 3:finish

int status;
String statusStr = null;
if (status == 1) {
   status = "agree";
} else if (status == 2) {
   status = "refuse";
}else if(status == 3) {
    status = “finish”;
}

方案一: 数组

这种仅限通过数字获取到字母或者中文。
首先设置数组

String[] statusArray = {"","agree","refuse","finish"};

通过数组的位置获取数组的值

int status;
String statusStr =  statusArray[status];

优点: 占用内存少
缺点: 状态值只能是数字,而且还需要考虑数组越界情况

方案二:HashMap

创建和添加map:

    private static final Map<Integer,String> map = new HashMap<>();

    static {
        map.put(1,"agree");
        map.put(2,"refuse");
        map.put(3,"finish");
    }

这种有两种求解方式,通过 key 获取 value 以及通过 value 获取 key,

由 key 获取 value

直接使用 get 方法即可。这里的key相对于数组解法,不限制 key 的类型。

int status;
map.get(status);

由 value 获取 key

使用map遍历:

int status;
for(Map.Entry<Integer, String> vo : map.entrySet()){
     if (vo.getValue().equals(result)) {
           status = vo.getKey();
           break;
      }
}

优点:状态值不限制数字
缺点:占用空间大

解决方案三、枚举

先定义一个枚举类

public enum TestEum {

    agree(1,"agree"),
    refuse(2,"refuse");

    private int code;

    private String capation;

    TestEum(int code,String capation){
        this.code = code;
        this.capation = capation;
    }

    public int getCode() {
        return code;
    }

   public String getCapation() {
        return capation;
   }
  
   String of(int code){
        for (TestEum testEum : TestEum.values()) {
            if (testEum.getCode() == code) {
                return testEum.getCapation();
            }
        }
        return null;
    } 
}

有了枚举以后,if-else 代码块可以优化成一行代码

String statusStr = TestEum.of(status);

总结

  1. 如果通过数字获取描述,使用数组即可。
  2. 如果通过描述获取数字,使用枚举和HashMap都可以。

转https://www.cnblogs.com/jeremylai7/p/15291165.html

免责声明:文章转载自《Java优化if-else代码几个解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mongoDB 入门手册VS2012_MVC4入门例子、代码视图分离办法、需要注意的坑爹问题等_被坑后不断更新此贴,要转载的话,请使用链接,不要转载内容下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

eclipse+maven+ssm框架搭建

eclipse+maven+ssm框架 0、系统环境 1)Windows 10 企业版 2)JDK 1.8.0_131 3)Eclipse Java EE IDE for Web Developers  Version: Neon.3 Release (4.6.3) 4)Tomcat 8.5 1、maven下载及配置 maven的下载地址:http:...

Unity3D脚本语言UnityScript初探

译者注: Unity3D中支持三种语言:JavaScript、C#、Boo,很多人不知道如何选择,通过这篇译文,我们可以搞清楚这三者语言的来龙去脉,对选择主语言有一定的借鉴意义。 首先,Unity是基于Mono也就是.Net的运行环境的,所以它肯定支持C#;然后,Unity团队自行开发了一种Boo的语言;后面可能考虑到用户的接受程度的问题,又开发了类似J...

python科学计算_numpy_线性代数/掩码数组/内存映射数组

1. 线性代数 numpy对于多维数组的运算在默认情况下并不使用矩阵运算,进行矩阵运算可以通过matrix对象或者矩阵函数来进行; matrix对象由matrix类创建,其四则运算都默认采用矩阵运算,和matlab十>分相似: a = np.matrix([[1,2,3],[4,5,6],[7,8,9]]) matrix([[1, 2, 3],[4,...

Android之Realm详解(非原创)

文章大纲 一、Realm介绍二、Realm实战三、Realm官方文档四、项目源码下载五、参考文章 一、Realm介绍 1. 什么是Realm   Realm 是一个手机数据库,是用来替代 SQlite 的解决方案,比 SQlite 更轻量级,速度更快,因为它有一套自己的数据库搜索引擎,并且还具有很多现代数据库的优点,支持 JSON,流式 API 调用,数...

SpringBoot+Mybatis-Plus两种分页方法

用到的依赖: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatisplus.version}&l...

C# PropertyGrid控件应用心得

最近项目中做一模块时偶发奇想,希望使用propertygrid的控件实现类似visual studio的属性样式,于是拿来一用,发现还真不是自己想象的那么简单,如果要实现一个比较好的展示,还真的需要不少技巧,通过自己的实践和网络的力量,“逢山开道,遇水搭桥”,总算是摸出一些门道,不敢私藏,拿出来与大家分享,呵呵。 先来转一个基础的,源自msdn http:...