有时我们需要批量的对不同的参数进行断言,而且我们还需要得到不同的反馈,这时普通的断言方法可能就不太适用了。所以呢这里就提供了一个工具类来应对这些场景,通过可选参的特性来实现对不同的参数进行不同的反馈:
import cn.hutool.core.util.ObjectUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* 参数断言工具类
*
* @author shenlongdaxia
*/
public class ArgsAssertUtil {
private ArgsAssertUtil() {
}
/**
* 可以自定义错误信息的断言
* 奇数位是要判断的对象,其后一位是他的错误提示信息
*
* @param obj
*/
public static void isAnyEmpty(Object... obj) {
if (obj.length % 2 != 0) {
throw new RuntimeException("请补充错误提示信息");
}
for (int i = 0; i < obj.length; i++) {
if (ObjectUtil.isEmpty(obj[i])) {
throw new RuntimeException(obj[++i].toString());
}
}
}
/**
* 可以自定义错误信息的断言
* 奇数位是要判断的对象,其后一位是他的错误提示信息
*
* @param obj
*/
public static void isAnyNotEmpty(Object... obj) {
if (obj.length % 2 != 0) {
throw new RuntimeException("请补充错误提示信息");
}
for (int i = 0; i < obj.length; i++) {
if (ObjectUtil.isNotEmpty(obj[i])) {
throw new RuntimeException(obj[++i].toString());
}
}
}
/**
* 获取多个日期参数中最大的那一个
*
* @param obj
* @return Date
*/
public static Date getMaxDate(Object... obj) {
List<Date> dates = new ArrayList<>();
for (Object o : obj) {
dates.add((Date) o);
}
return dates.stream().max(Date::compareTo).get();
}
/**
* 获取多个日期参数中最小的那一个
*
* @param obj
* @return Date
*/
public static Date getMinDate(Object... obj) {
List<Date> dates = new ArrayList<>();
for (Object o : obj) {
dates.add((Date) o);
}
return dates.stream().min(Date::compareTo).get();
}
/**
* 第一个日期参数是最大的
*
* @param msg 错误提示信息
* @param obj 多个日期参数
*/
public static void firstDateMax(String msg, Object... obj) {
Date[] dates = new Date[obj.length];
for (int i = 0; i < dates.length; i++) {
dates[i] = (Date) obj[i];
}
if (!Arrays.stream(dates).max(Date::compareTo).get().equals(obj[0])) {
throw new RuntimeException(msg);
}
}
/**
* 第一个日期参数是最小的
*
* @param msg 错误提示信息
* @param obj 多个日期参数
*/
public static void firstDateMin(String msg, Object... obj) {
Date[] dates = new Date[obj.length];
for (int i = 0; i < dates.length; i++) {
dates[i] = (Date) obj[i];
}
if (!Arrays.stream(dates).min(Date::compareTo).get().equals(obj[0])) {
throw new RuntimeException(msg);
}
}
/**
* 第一个日期在第开始日期和结束日期之间
*
* @param date
* @param start
* @param end
* @param msg 错误提示信息
*/
public static void firstDateBetween(Date date, Date start, Date end, String msg) {
if (date.before(start) || date.after(end)) {
throw new RuntimeException(msg);
}
}
}