一、场景再现

  我们平时在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断言的新时代的更多相关文章

  1. Idea中开启assert断言

    先打开相应的配置面板,有以下两种方式.   然后在VM栏里输入 -enableassertions 或者 -ea 就好了 然后编写程序试试 我的目录结构如下:(因为Main class那里要写类的全限 ...

  2. EVM 2.0 预览版,跃见非凡,源于鸿蒙,开启物联网小程序新时代

    1. 基于EVUE的物联网小程序 EVM诞生以来,一直致力于让物联网开发变得简单,自鸿蒙OS 1.0 发布后,最引人注目的莫过于华为在应用程序开发框架层面面向应用开发者提供了一种全新的开发方式: 框架 ...

  3. 关于java中assert(断言)的使用讲解

    说明:写的不是很全面,有任何问题请留言,多交流,谢谢! 1.eclipse.myeclipse开启assert(断言),默认是关闭,如下: 说白了就是设置一下jvm的参数,参数是-ea或者-enabl ...

  4. Java使用assert断言

    Java1.4后新增assert关键字 Idea中开启assert断言 使用 assert boolean表达式 assert boolean表达式 : 错误提示信息 例子 public static ...

  5. K:java 断言 assert 初步使用:断言开启、断言使用

    @转自天地悠悠的个人博客 主要总结一下在eclipse中如何使用断言. (一)首先明确: java断言Assert是jdk1.4引入的. jvm 断言默认是关闭的. 断言是可以局部开启的,如:父类禁止 ...

  6. java断言assert初步使用:断言开启、断言使用

    1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. 断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”. 断言只适用复杂的调式过程. ...

  7. 01 java断言assert初步使用:断言开启、断言使用

    参考文件:http://blog.sina.com.cn/s/blog_59c9412d0100fd55.html 1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. ...

  8. C++ ASSERT() 断言机制

    C++ ASSERT() 断言机制 ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行.如果表达式不为0,则继 ...

  9. Java中assert(断言)的使用

    Java中assert(断言)的使用 1.Eclipse中默认assert(断言)是关闭,开启方式如下: 简单来说:就是设置一下jvm的参数,参数是-enableassertions或者-ea(推荐) ...

  10. Spring Assert 断言

    Assert(断言)的初步理解构思 Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查, ...

随机推荐

  1. CGI、FastCGI和PHP-FPM区别和关系详解

    在搭建 LAMP/LNMP 服务器时,会经常遇到 PHP-FPM.FastCGI和CGI 这几个概念.如果对它们一知半解,很难搭建出高性能的服务器.接下来我们就以图形方式,解释这些概念之间的关系. 1 ...

  2. Java实现快速快速排序算法

    算法简介 快速排序(Quick Sort) 是由冒泡排序改进而得的.在冒泡排序过程中,只对相邻的两个记录进行比较,因此每次交换两个相邻记录时只能消除一个逆序.如果能通过两个(不相邻)记录的一次交换直接 ...

  3. Groovy 基于Groovy实现DES加解密

    groovy 3.0.7 DES加密简介 加密分为对称加密和非对称加密.非对称加密,加解密使用不同的密钥,如RSA:对称加密,加解密使用相同的密钥,如DES(Data Encryption Stand ...

  4. Django 继承AbstractUser扩展用户模型

    Django 继承AbstractUser扩展用户模型 by:授客 QQ:1033553122 测试环境 Win 10   Python 3.5.4   Django-2.0.13.tar.gz 官方 ...

  5. openEuler 安装 DocekrCE

    就个人而言,openEuler 算是不错的国产化操作系统."一脉传承"自redhat让实际的使用体验非常丝滑.软件源都是国内的,开箱即用,漏洞的补丁发的也挺及时.美中不足的是貌似 ...

  6. linux学习(7):Linux最常用150个命令汇总

    Linux最常用150个命令汇总 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用. help 查看Linux内置命令的帮助,比如cd命令. 文件和目录操作 ...

  7. 【Git】GithubDesktop 忽略文件无法忽略BUG

    问题描述: 从仓库拉取的[.gitignore]忽略配置文件,在项目跑起来之后会生成诸多.idea文件,target打包文件 一开始没有忽略,但是发现使用GD配置之后忽略无效: 解决办法: 做一次随便 ...

  8. 【Java】SonarLint 疑难语法修正

    规范驼峰命名使用: 提示信息 Local variable and method parameter names should comply with a naming convention 代码片段 ...

  9. 【Uni-App】组件笔记

    官网文档地址: https://uniapp.dcloud.io/component/README 组件是视图层的基本组成单元. 组件是一个单独且可复用的功能模块的封装. 每个组件,包括如下几个部分: ...

  10. 【托普斯的力场】—— ARPG游戏《艾尔登法环》中的人物:托普斯

    地址: https://youtube.com/shorts/oSIbOQ_r4fA?si=F-knFwjZ3iPXqPeS https://www.bilibili.com/video/BV1fV4 ...