import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Constructor;
import java.util.Collection;
import java.util.Map;
/**
* 断言工具类
*
* 使用方法:
*
* 在本地上下文中定义AssertUtils的bean,并注入 exceptionClassName
* 集成了CommonException抽象类的异常类路径
*
* 例如:
*
注意:这里的"在"是指"equals",不是指对象=。 * * @param base 待查对象 * @param collection 容器集合 * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void contains(final Object base, final Collection> collection, final CommonResultCode resultCode, final Object... objs) { notEmpty(collection, resultCode, objs); isTrue(collection.contains(base), resultCode, objs); } /** * 断言指定对象在容器中。否则抛出指定错误信息。 * *
注意:这里的"在"是指"=",不是指对象equals。 * * @param base 待查对象 * @param collection 容器集合 * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void in(final Object base, final Object[] collection, final CommonResultCode resultCode, final Object... objs) { notNull(collection, resultCode, objs); boolean hasEqual = false; for (Object obj2 : collection) { if (base == obj2) { hasEqual = true; break; } } isTrue(hasEqual, resultCode, objs); } /** * 断言指定对象不在容器中。否则抛出指定错误信息。 * *
注意:这里的"在"是指"=",不是指对象equals。 * * @param base 待查对象 * @param collection 容器集合 * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void notIn(final Object base, final Object[] collection, final CommonResultCode resultCode, final Object... objs) { if (null == collection) { return; } for (Object obj2 : collection) { isTrue(base != obj2, resultCode, objs); } } /** * 断言对象为空,否则抛出指定错误信息。 * * @param str 断言字符串 * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void blank(final String str, final CommonResultCode resultCode, final Object... objs) { isTrue(StringUtils.isBlank(str), resultCode, objs); } /** * 断言对象为非空,否则抛出指定错误信息。 * * @param str 断言字符串 * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void notBlank(final String str, final CommonResultCode resultCode, final Object... objs) { isTrue(StringUtils.isNotBlank(str), resultCode, objs); } /** * 断言对象为null,否则抛出指定错误信息。 * * @param object 待检查对象 * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void isNull(final Object object, final CommonResultCode resultCode, final Object... objs) { isTrue(object == null, resultCode, objs); } /** * 断言对象非null,否则抛出指定错误信息。 * * @param object 待检查对象 * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void notNull(final Object object, final CommonResultCode resultCode, final Object... objs) { isTrue(object != null, resultCode, objs); } /** * 断言集合不为空或null,否则抛出指定错误信息。 * * @param collection 待检查集合 * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void notEmpty(final Collection collection, final CommonResultCode resultCode, final Object... objs) { isTrue(collection != null && collection.size() != 0, resultCode, objs); } /** * 断言集合为空或null,否则抛出指定错误信息。 * * @param collection 待检查集合 * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void empty(final Collection collection, final CommonResultCode resultCode, final Object... objs) { isTrue(collection == null || collection.size() == 0, resultCode, objs); } /** * 断言map不为空或null,否则抛出指定错误信息。 * * @param map 待检查map * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void notEmpty(final Map map, final CommonResultCode resultCode, final Object... objs) { isTrue(map != null && map.size() != 0, resultCode, objs); } /** * 断言map为空或null,否则抛出指定错误信息。 * * @param map 待检查map * @param resultCode 错误码 * @param objs 任意个异常描述信息的参数 */ public static void empty(final Map map, final CommonResultCode resultCode, final Object... objs) { //isTrue(CollectionUtils.isEmpty(map), resultCode, objs); isTrue(map == null || map.size() == 0, resultCode, objs); } /** * 生成输出到日志的字符串 * * @param objs 任意个要输出到日志的参数 * @return 日志字符串 */ private static String getLogString(Object... objs) { StringBuilder log = new StringBuilder(); for (Object o : objs) { log.append(o); } return log.toString(); } /** * 初始化AssertUtil配置。 */ @SuppressWarnings("unchecked") private static void initConfig() { Class exceptionClassTmp = null; // 1,加载异常类 if (StringUtils.isBlank(exceptionClassName)) { throw new IllegalArgumentException("exceptionClassName has not set!"); } try { exceptionClassTmp = Class.forName(exceptionClassName); } catch (Throwable e) { throw new IllegalArgumentException("loading exceptionClass failed![exceptionClassName=" + exceptionClassName + "]", e); } // 必须是AssertException的子类 if (!AbstractBizException.class.isAssignableFrom(exceptionClassTmp)) { throw new IllegalArgumentException( "illegal exceptionClass type, must be the subclass of MarketCommonException![exceptionClassName=" + exceptionClassName + "]"); } Constructor constructorTmp = null; // 2,获取构造方法 try { constructorTmp = exceptionClassTmp.getConstructor(String.class); } catch (Throwable e) { throw new IllegalArgumentException("constructor method not found![exceptionClassName=" + exceptionClassName + "]", e); } // 3,缓存反射结果 constructor = constructorTmp; } /** * Setter method for property exceptionClassName. * * @param exceptionClassName value to be assigned to property exceptionClassName */ public void setExceptionClassName(String exceptionClassName) { AssertUtils.exceptionClassName = exceptionClassName; initConfig(); } }