《放弃繁琐的if-else》开启Assert断言的新时代
一、场景再现
我们平时在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断言的新时代的更多相关文章
- Idea中开启assert断言
先打开相应的配置面板,有以下两种方式. 然后在VM栏里输入 -enableassertions 或者 -ea 就好了 然后编写程序试试 我的目录结构如下:(因为Main class那里要写类的全限 ...
- EVM 2.0 预览版,跃见非凡,源于鸿蒙,开启物联网小程序新时代
1. 基于EVUE的物联网小程序 EVM诞生以来,一直致力于让物联网开发变得简单,自鸿蒙OS 1.0 发布后,最引人注目的莫过于华为在应用程序开发框架层面面向应用开发者提供了一种全新的开发方式: 框架 ...
- 关于java中assert(断言)的使用讲解
说明:写的不是很全面,有任何问题请留言,多交流,谢谢! 1.eclipse.myeclipse开启assert(断言),默认是关闭,如下: 说白了就是设置一下jvm的参数,参数是-ea或者-enabl ...
- Java使用assert断言
Java1.4后新增assert关键字 Idea中开启assert断言 使用 assert boolean表达式 assert boolean表达式 : 错误提示信息 例子 public static ...
- K:java 断言 assert 初步使用:断言开启、断言使用
@转自天地悠悠的个人博客 主要总结一下在eclipse中如何使用断言. (一)首先明确: java断言Assert是jdk1.4引入的. jvm 断言默认是关闭的. 断言是可以局部开启的,如:父类禁止 ...
- java断言assert初步使用:断言开启、断言使用
1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. 断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”. 断言只适用复杂的调式过程. ...
- 01 java断言assert初步使用:断言开启、断言使用
参考文件:http://blog.sina.com.cn/s/blog_59c9412d0100fd55.html 1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. ...
- C++ ASSERT() 断言机制
C++ ASSERT() 断言机制 ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行.如果表达式不为0,则继 ...
- Java中assert(断言)的使用
Java中assert(断言)的使用 1.Eclipse中默认assert(断言)是关闭,开启方式如下: 简单来说:就是设置一下jvm的参数,参数是-enableassertions或者-ea(推荐) ...
- Spring Assert 断言
Assert(断言)的初步理解构思 Web 应用在接受表单提交的数据后都需要对其进行合法性检查,如果表单数据不合法,请求将被驳回.类似的,当我们在编写类的方法时,也常常需要对方法入参进行合 法性检查, ...
随机推荐
- java将list中某个元素放在首位
java将list中某个元素放在首位 1 List<Example> example = exampleRepository.list(); 2 3 //将list里的某个字符串默认排列在 ...
- HTB- Archetype
端口扫描 nmap -sV -sT 10.129.1.1 smbclint smbclient -L 10.129.149.214 获取密码 smbclient //10.129.149.214/ba ...
- 容器技术Docker知识精讲【形成知识体系篇】
作者的经验分享,包括很多实战过程和总结,为着手系统化学习Docker容器的朋友提供. 环境要求 Linux操作系统(Centos),建议在虚拟机VMware或VirtualBox下安装Centos D ...
- 使用了条件三元运算符来判断 this.temp.id 是否存在且 mt_qty 是否已被赋值
mt_qty: (this.temp.id && this.temp.mt_qty) ? this.temp.mt_qty : event.wo_wip,在这个修正后的代码中,使用了条 ...
- django redirect_authenticated_user
redirect_authenticated_user是在Web开发框架(如Django)中常见的设置,用于控制身份验证重定向的行为. 当启用redirect_authenticated_user时, ...
- Django 解决跨域访问API失败问题
解决跨域访问API失败问题 By:授客 QQ:103355122 实践环境 Win 10 Python 3.5.4 Django-2.0.13.tar.gz 官方下载地址: https://w ...
- selenium启动Chrome配置参数问题
每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件.没有收藏.没有历史记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器, ...
- 仓颉编程语言技术指南:嵌套函数、Lambda 表达式、闭包
本文分享自华为云社区<[华为鸿蒙开发技术]仓颉编程语言技术指南[嵌套函数.Lambda 表达式.闭包]>,作者:柠檬味拥抱. 仓颉编程语言(Cangjie)是一种面向全场景应用开发的通用编 ...
- Mysql函数10-IF
IF函数用于判断条件是否成立,成立则执行命令1,不成立则执行命令2. 1.sql查询出一列create_time select create_time from goods where id=65 2 ...
- Jmeter二次开发函数之入门
背景:Jmeter不能满足我们的参数需求,如生成手机号码.身份证号码等业务,固对jmeter进行二次函数开发. jmeter提供了接口供用户进行二次开发,我们只需引入包进行编辑.从jmeter规范上, ...