赞
踩
一份优秀的代码,是不应该出现大量的if-else的,所以要对if-else进行改进,比如说拆解成多个方法或者用switch-case代替,又或者根据实际场景,使用枚举类,本文就是第三种方法。枚举
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 * * ?"; }
一般这种比较多的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; } }
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();
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。