zoukankan      html  css  js  c++  java
  • 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];
    
    

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

    方案二: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

  • 相关阅读:
    招聘.Net中高级软件研发工程师
    布局和救火
    UITableView详解(转)
    iOS开发那些事--性能优化–内存泄露问题的解决(转)
    LeeCode(PHP) 2.add-two-numbers
    LeeCode(PHP) 1.Two Sum
    PHP实现 序列帧拆分
    PHPExcel导出大量数据超时及内存错误解决方法(转)
    laravel路由 实现短连接生成及跳转(php 301重定向)
    从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续(面试题)
  • 原文地址:https://www.cnblogs.com/wl-blog/p/15292643.html
Copyright © 2011-2022 走看看