《放弃繁琐的if-else》开启Assert断言的新时代

摘要:
引发异常*@paramobject*@throwsBizException*/publicstatic<SCodeEnumcodeEum)throwsBizException{if(object==null){thrownewBizException(codeEum;
一、场景再现

  我们平时在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);

免责声明:文章转载自《《放弃繁琐的if-else》开启Assert断言的新时代》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux 系统的日志目录SocketChannel简述下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java读取图片和EXIF信息

后台需要读取客户端上传的图片,记录图片长宽,客户端以后就可以根据记录的长宽,展示图片。 正常的图片,读取很简单,代码如下: BufferedImage originalImg = ImageIO.read(file.getInputStream()); int originalwidth = originalImg.getWidth(); //上传图片...

C# TimeSpan 时间计算

本文告诉大家简单的方法进行时间计算 实际上使用 TimeSpan 可以做到让代码比较好懂,而代码很简单。 例如我使用下面的代码表示 5 秒 const int needCount = 5 * 1000; 因为后面使用的是延迟,延迟的代码很简单 Task.Delay(needCount) 这时传入的是一个毫秒,但是很多小伙伴问,为什么是 5*1000 表...

LINUX 上 实现SNTP (时间同步)

Network Time Protocol (NTP) 也是RHCE新增的考试要求. 学习的时候也顺便复习了一下如何设置Linux的时间,现在拿出来和大家分享 设置NTP服务器不难但是NTP本身是一个很复杂的协议. 这里只是简要地介绍一下实践方法和上次一样,下面的实验都在RHEL5上运行  https://bbs.csdn.net/topics/33019...

(翻译)Entity Framework技巧系列之五 Tip 16 – 19

提示16. 当前如何模拟.NET 4.0的ObjectSet<T> 背景: 当前要成为一名EF的高级用户,你确实需要熟悉EntitySet。例如,你需要理解EntitySet以便使用 AttachTo(…) 或创建EntityKey。 在大部分情况下,针对每个对象/clr类型只有一个可能的EntitySet。Tip 13正是利用这种想法来简化附...

VSTO:使用工作簿

一、新建工作簿 以编程方式创建工作簿时,所创建的将是一个本机Microsoft.Office.Interop.Excel.Workbook对象,而不是Microsoft.Office.Tools.Excel.Workbook宿主项。 1.单击工作表中的按钮新建工作簿 在工作簿Sheet1中新建一个按钮,在按钮的单击事件中编写以下代码新建一个工作簿: usi...

Android studio的一些常用快捷键

Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) Ctrl+E或者Alt+Shift+C 最近更改的代码 Ctrl+R 替换文本 Ctrl+F 查找文本 Ctrl+Shift+...