• if-else的改进方案


    一份优秀的代码,是不应该出现大量的if-else的,所以要对if-else进行改进,比如说拆解成多个方法或者用switch-case代替,又或者根据实际场景,使用枚举类,本文就是第三种方法。枚举

    HealthRecordPushUtil的getCron()

    public String getCron(String params) {
            String cycle = JSON.parseObject(params).getString(HmConst.PARAMS_CYCLE);
            String type = JSON.parseObject(params).getString(HmConst.PARAMS_TYPE);
    		if (HmConst.PUSH_DEFAULT.equals(type)){
             	return "0 0 0 1 * ?";
    	      } else if (HmConst.PUSH_PACKAGE.equals(type)) {
    	          if (HmConst.CYCLE_TYPE_WEEK.equals(cycle)){
    	              return "0 0 0 ? * MON";
    	          } else if (HmConst.CYCLE_TYPE_MONTH.equals(cycle)) {
    	              return "0 0 0 1 * ?";
    	          } else if (HmConst.CYCLE_TYPE_QUARTER.equals(cycle)) {
    	              return "0 0 0 1 4,7,10,1 ?";
    	          } else if (HmConst.CYCLE_TYPE_YEAR.equals(cycle)) {
    	              return "0 0 0 1 1 ? *";
    	          }
    	      }
            return "0 0 9 * * ?";
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    一般这种比较多的if-else可以改成用枚举结合switch-case,或者进行改进,一个优秀的代码是不应该出现大量的if-else的

    上面的代码改成以下形式

    枚举类

    
    import lombok.AllArgsConstructor;
    import lombok.Getter;
    @Getter
    @AllArgsConstructor
    public enum HealthRecordPushCycleEnum {
        /**
         * 按周推送
         */
        CYCLE_TYPE_WEEK("week", "周推送","0 0 0 ? * MON"),
    
        /**
         * 按月推送
         */
        CYCLE_TYPE_MONTH("month", "月推送","0 0 0 1 * ?"),
    
        /**
         * 按季推送
         */
        CYCLE_TYPE_QUARTER("quarter", "季推送","0 0 0 1 4,7,10,1 ?"),
    
        /**
         * 按年推送
         */
        CYCLE_TYPE_YEAR("year", "年推送","0 0 0 1 1 ? *"),
    
        /**
         * 默认推送
         */
        PUSH_DEFAULT("default", "默认推送","0 0 0 1 * ?"),
    
        /**
         * 按套餐推送
         */
        PUSH_PACKAGE("package", "按套餐推送", ""),
    
        ;
        private String name;
        private String desc;
        private String cycle;
    
        public static HealthRecordPushCycleEnum getByType(String type, String cycle) {
            if (PUSH_DEFAULT.name.equals(type)) {
                return PUSH_DEFAULT;
            } else {
                for (HealthRecordPushCycleEnum anEnum : HealthRecordPushCycleEnum.values()) {
                    if (anEnum.getName().equals(cycle)) {
                        return anEnum;
                    }
                }
            }
            return null;
        }
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    原来的方法

    public String getCron(String params) {
            String cycle = JSON.parseObject(params).getString(HmConst.PARAMS_CYCLE);
            String type = JSON.parseObject(params).getString(HmConst.PARAMS_TYPE);
            HealthRecordPushCycleEnum anEnum = HealthRecordPushCycleEnum.getByType(type, cycle);
            assert anEnum != null;
            return anEnum.getCycle();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    java进阶之路
    Unescaped & or nonterminated character/entity reference 报错-IDEA
    在Windows Sever2012中配置NTP服务器
    Mybatis中的缓存相关简介说明
    如何评价GPT-4o?【该回答来自GPT-4o】
    xml 解析bean工具类
    71.【Java.哈希表(散列表)】
    mmsegmentation 添加L1Loss
    Java学习:NIO<一>
    Oracle 数据库表和视图 的操作
  • 原文地址:https://blog.csdn.net/HRX98/article/details/126602850