最近在尝试重构一个老系统的代码, 阅读过程中经常发现对方法参数值进行校验的逻辑. 它们看上去会是这样:
if (arg1 == null) { throw new IllegalArgumentException("...");
}
if (arg2 == null) {
arg2 = new ....;
}
invoke(arg1,arg2);
if (arg3 <= 0 || arg3 > 10 ) {
throw new IllegalArgumentException("...");
}
...
上面的写法其实问题不大, 但参数一多, 十多行都是, 我就有点看不下去了, 难道不能再简单明了一点吗?( 好吧, 我的代码洁癖又犯了:( )
其实可以写成这样的:
invoke(get(arg1).orComplain("..."),
get(arg2).orDefault(new ...));
check(arg3).greaterThan(0).lessThanOrEqual(10).orComplain();
嗯, 要是写成这样我就觉得舒坦了, 基于这个思路, 随手写了个实现, 取名叫Guards, 感兴趣的可以 查看更多范例.