关于if_else if .... 优化
2019-05-18 本文已影响0人
William_Wei007
优化之前的代码
略写代码 大致意思:从数据库,按照不通的类型,调用不同的方法.
//注入 接口 (查询db的接口)
@Autowired
StatisBatchStatusMapper;
public void xxx(){
List<String> batchNumList = Lists.newArrayList();
if(infTypeEnum.equals(InfTypeEnum.USER_INFO)){
batchNumList= statisBatchStatusMapper.getUserInfoBatchNum();
}else if(infTypeEnum.equals(InfTypeEnum.PRODUCT)){
batchNumList=statisBatchStatusMapper.getProductBatchNum();
}else if(infTypeEnum.equals(InfTypeEnum.TRANSACTION_DETAILS)){
batchNumList = statisBatchStatusMapper.getTransactionDetailsBatchNum();
}else if(infTypeEnum.equals(InfTypeEnum.PRODUCT_STATUS)){
...
还有好几个判断...赋值
}
....略
}
闲来无事, 突然想到貌似if .. else if ..这类的可以进行优化,
于是看了一些文章,感觉适用我的方法, 把一些数据,放到map中
就可以了 优化之后...
此处设计到查询数据库, 所以利用了 “类” 实现 “InitializingBean” 这个接口, 然后实现 抽象方法(afterPropertiesSet())来进行获取数据.
弊端就是项目启动初始化就会去加载这些. 如果用不到就浪费了.
InfTypeEnum -- 枚举类型
private static Map<InfTypeEnum, List<String>> handlerMap = new HashMap<>(12);
@Override
public void afterPropertiesSet() throws Exception {
-- 虽然是接口,但是spring 会自动进行实例化
StatisBatchStatusMapper statisBatchStatusMapper= SpringContextHolder.getApplicationContext().getBean(StatisBatchStatusMapper.class);
handlerMap.put(InfTypeEnum.USER_INFO,statisBatchStatusMapper.getUserInfoBatchNum());
handlerMap.put(InfTypeEnum.PRODUCT,statisBatchStatusMapper.getProductBatchNum());
handlerMap.put(InfTypeEnum.PRODUCT_STATUS,statisBatchStatusMapper.getProdutStatusBatchNum());
handlerMap.put(InfTypeEnum.REPAYMENT_PLAN,statisBatchStatusMapper.getRepaymentPlanBatchNum());
handlerMap.put(InfTypeEnum.PURCHASE_INFO,statisBatchStatusMapper.getPurchaseInfoBatchNum());
handlerMap.put(InfTypeEnum.PURCHASE_OPT,statisBatchStatusMapper.getPurchaseOptBatchNum());
handlerMap.put(InfTypeEnum.RIGHT_INITIAL,statisBatchStatusMapper.getTrightInitialBatchNum());
.....
}
经过上面的修改,
可以在调用处,直接就 通过map 的get("参数")方法获取相应的数据了.
简洁明了...