今天我在用别人开发的一个工具类. 检查参数是否已经全部传递
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秒钟的事情--- 这种所谓的"自表达代码"确实能减少阅读代码时的障碍.
我觉得人得思维还是适合直线性的思考. 如果在另一个方法种调用这个工具类.采取第一种方式 ,我们的注意力会被分担.
而第二种方式 有助于保持思维的连贯性.提高效率.