最近项目 controller 比较烦恼 if else 的参数判断,网上找了一些相关的优化文章,但始终没有比较心仪的。但他们都给了我不错的启发,在此非常感谢,嗯,如果也有伙伴在烦恼参数的判断,可以往这边看看
package com.yianjia.common.utils;
import java.util.function.Function;
/**
* @author zengqinghua
*/public class ParamValid<T> {
private T t;
public ParamValid() {
}
public ParamValid(T t) {
this.t = t;
}
public static <T> ParamValid<T> init(T t) {
ParamValid<T> paramValid = new ParamValid<T>(t);
return paramValid;
}
public Object end(Function<T, Object> function) {
return function.apply(t);
}
/**
* 校验(true的话校验不通过)
*
* @return ParamValid
*/ public ParamValid<T> valid(Function<T, Boolean> function) {
if (function.apply(t)) {
throw new IllegalArgumentException("参数错误");
}
return this;
}
/**
* 校验(true的话校验不通过,错误信息)
*
* @return ParamValid
*/ public ParamValid<T> valid(Function<T, Boolean> function, String message) {
if (function.apply(t)) {
throw new IllegalArgumentException(message);
}
return this;
}
/**
* 校验(true的话校验不通过,错误信息)
*
* @return ParamValid
*/ public ParamValid<T> valid(boolean condition, Function<T, Boolean> function, String message) {
if (!condition) {
return this;
}
if (function.apply(t)) {
throw new IllegalArgumentException(message);
}
return this;
}
}
使用方式
public String validOrderCreateOrEditParam(OrderParam orderParam) {
try {
ParamValid.init(orderParam)
.valid(param -> !"上门提货".equals(param.getTihuoClaim()) && !"不提货".equals(param.getTihuoClaim()), "提货要求错误")
.valid(param -> !systemConfigUtils.songhuoClaimList.contains(param.getSonghuoClaim()), "送货要求错误")
;
} catch (IllegalArgumentException e) {
return e.getMessage();
}
return null;
}
OrderParam 换成你们需要判断的对象就好啦
String errorMsg = validOrderCreateOrEditParam(orderParam);
if (null != errorMsg) {
return R.error(null, errorMsg);
}
当校验不通过的时候,就会返回指定的错误