一次工具类的改造以及思考

今天我在用别人开发的一个工具类. 检查参数是否已经全部传递

if(!ParamsCheckUtil.checkNull(json,"CODE").isEmpty())
			return ParamsCheckUtil.createErrMap("102", "缺少CODE参数", null);



ParamsCheckUtil.checkNull返回一个Map ,如果不缺少参数 ,Map就是空的.


这个工具类没有什么明显的错误,但是调用起来总是很别扭.----如果检查参数为空的结果不是空的 那么说明缺少参数

这个if里的isEmpty和! 一般人至少得花个5秒钟去考虑什么意思. 而且一般你还去看一下checkNull方法才知道返回的是Map


于是我自己写了一个改进版本的

我的版本这样调用

if(ParamCheckUtil.check(json, "A","B","C").isAllPresented()){
			System.out.println("param check passed");
		}else{
			System.out.println(ParamCheckUtil.check(json, "A","B","C").getMissingKeys()+" are missing");
		}

大言不惭的讲,是不是比之前清晰了很多.

附上源码

public class ParamCheckUtil {
	
	private ParamCheckUtil(){}
	
	public static CheckResult check(JSONObject json,String...paramKeys){
		
		List<String> missingKeys = new ArrayList<>();
		
		for(String key : paramKeys){
			
			if(json.containsKey(key)){
				continue;
			}else{
				missingKeys.add(key);
			}
			
		}
		
		
		return new CheckResult(missingKeys);
		
	}

	public static class CheckResult{

		private boolean allPresented;
		private List<String> missingKeys;
		
		public CheckResult(List<String> missingKeys) {
			
			this.missingKeys = missingKeys;
			this.allPresented = missingKeys.isEmpty();
			
		}
		
		
		public boolean isAllPresented(){
			return this.allPresented;
		}
		
		public List<String> getMissingKeys(){
			return this.missingKeys;
		}
		
	}
	
}

可能你会质疑这样做的意义,5秒钟有那么重要.个人认为这种不仅仅是5秒钟的事情--- 这种所谓的"自表达代码"确实能减少阅读代码时的障碍.

我觉得人得思维还是适合直线性的思考. 如果在另一个方法种调用这个工具类.采取第一种方式 ,我们的注意力会被分担.

而第二种方式 有助于保持思维的连贯性.提高效率.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值