Java优化if-else代码

2021年09月15日 阅读数:4
这篇文章主要向大家介绍Java优化if-else代码,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

前言

开发系统一些状态,好比订单状态:数据库存储是数字或字母,可是须要显示中文或英文,通常用到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];

优势: 占用内存少
缺点: 状态值只能是数字,并且还须要考虑数组越界状况this

方案二:HashMap

建立和添加map:code

    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遍历:get

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

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

解决方案3、枚举

先定义一个枚举类test

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均可以。