一、场景再现
我们平时在service操作数据库,难免会出现这种情况:
if(null == result){
}else{
}
这样的代码会吞噬掉你有限的代码空间,虽然通俗易懂,但一旦爆炸式的袭来,将会是一场阅读灾难。
终于,在java8到来之际,带来了福音,利用option解决了NullPoint问题,不用在代码里面判空拦截(不懂的,尽快问度娘,此处不赘述)
此篇文章,我们主要介绍Assert断言带来的丝滑体验。
注:Assert抛出的异常,刚好可以被全局异常拦截(https://www.cnblogs.com/weipt0106/p/13269277.html)
二、断言具体的实现
2.1、写一个AssertUtils
当然也可以参看Hutools提供的Assert,但我们自己写,可以抛出我们自己定义的异常,方便全局异常处理。
public abstract class AssertUtils { /** * 如果入参collection集合为空,则抛出201异常 * @param collection * @throws BizException */ public static void notEmpty(@Nullable Collection collection,SCodeEnum codeEum) throws BizException { if (ObjectUtils.isEmpty(collection)) { throw new BizException(codeEum); } } /** * 如果入参对象为null,抛出异常 * @param object * @throws BizException */ public static <T> T notNull(T object,SCodeEnum codeEum) throws BizException { if (object == null) { throw new BizException(codeEum); } return object; } /** * 如果入参text为空,则抛出异常 * @param text * @throws BizException */ public static void hasText(@Nullable String text,SCodeEnum codeEum) throws BizException { if (!StringUtils.hasText(text)) { throw new BizException(codeEum); } } /** * 断言是否为真,如果为 {@code false} 抛出 {@code BizException} 异常<br> * @param expression 布尔值 * @param codeEum 错误码 * @throws BizException if expression is {@code false} */ public static void isTrue(boolean expression, SCodeEnum codeEum) throws BizException { if (false == expression) { throw new BizException(codeEum); } } /** * 断言是否为假,如果为 {@code true} 抛出 {@code BizException} 异常<br> * @param expression 布尔值 * @param codeEum 错误码 * @throws BizException if expression is {@code false} */ public static void isFalse(boolean expression, SCodeEnum codeEum) throws BizException { if (expression) { throw new BizException(codeEum); } } }
2.2、代码中的使用
替代if-else的最佳体验
//判断批量操作是否成功 List<SiteProject> siteProjects = BeanUtils.convertToResponse(SiteProject.class, createReqs); boolean flag = this.saveBatch(siteProjects); AssertUtils.isTrue(flag, SCodeEnum.INSERT_ERROR); //传入条件,返回true,false这种方式是万能的 int updateNum = siteProjectMapper.updateById(updateReq); AssertUtils.isTrue(updateNum>0, SCodeEnum.UPDATE_ERROR);//判断对象不为空 ResponseBean responseBean = commonOperateFlowable.startProcess(wfProcessExecBean); AssertUtils.notNull(responseBean, SCodeEnum.INSERT_ERROR);