Assert工具(断言)的使用、ReturnAssert工具
文章目录assert机制为什么要用assert完整版代码(包括异常处理)判断是否是空字符串生产环境为什么不推荐用断言assert和AssertUtils的区别Assert工具为什么不受断言开关的影响呢?spring Assert的使用判断字符串是否为空spring只有Assert这一个实现类吗?自定义断言工具自定义断言工具代码ReturnAssert工具assert机制其实就是相当于判断工具如果不符合期待就抛出异常异常信息为自定义的message。代码原生assert(java关键字assert)例子assert!StringUtils.isEmpty(request.getName());assert工具类列子(如spring的Assert类)Assert.hasText(null,参数错误);Assert.notNull(null,asdf);Assert.isTrue(false,判断错误);为什么要用assert最直接的原因就是为了简化代码。可以看下下面代码的区别。不用断言Stringusername;Stringpassword;if(StringUtils.isNotEmpty(username)){return用户名不能为空;}if(StringUtils.isNotEmpty(username)){return用户名不能为空;}使用断言try{Stringusername;Stringpassword;Assert.hasLength(username,用户名不能为空);Assert.hasLength(username,密码不能为空);}catch(IllegalArgumentExceptione){logger.error(errorMessage{},e.getMessage(),e);}断言配合全局异常处理来用很不错ControllerAdvice(com.test)ResponseBodypublicclassGlobalExceptionHandler{ExceptionHandler(IllegalArgumentException.class)publicStringillegalArgumentExceptionHandler(IllegalArgumentExceptionex){returnex.getMessage();}}完整版代码(包括异常处理)代码JsonResultresultnewJsonResult();StringmethodName定制断言功能_断言工具isEmpty;try{log.info(methodName请求开始request{},JSON.toJSONString(request));Assert.hasLength(request.getName(),名称不能为空);Assert.hasLength(request.getPassword(),密码不能为空);Assert.hasLength(request.getAge(),年龄不能为空);log.info(methodName请求完成result{},JSON.toJSONString(result));returnresult;}catch(IllegalArgumentExceptione){// 注这里虽然是异常但是打失败的日志和不期待的异常区分开log.info(methodName请求失败{},e.getMessage());// 这里的写法注意下去掉error直接用{}returnJsonResult.error(-1,methodName请求失败e.getMessage());}catch(Exceptione){log.error(methodName请求异常error,e);returnJsonResult.error(-1,methodName请求异常errore.getMessage());}效果一目了然不用每个判断都单独写log和返回了集中捕获IllegalArgumentException进行处理即可当然如果全局异常处理那更加方便。判断是否是空字符串Assert.hasLength(,用户名不能为空);相当于StringUtils.isNotEmpty();生产环境为什么不推荐用断言因为断言默认是关闭的如果没有手动开启那么相当于无效容易造成不同环境逻辑不一致留坑。编译和运行的时候要加参数否则编译不通过或者运行无效。javac -source 1.4 AssertTest.java # 编译的时候要加 -source 1.4java -ea AssertTest # 运行的时候要加 -ea在vm中加-ea(enable assert)表示启用断言。在vm中加-da(disable assert)表示禁用断言(实际默认就是禁用)。assert和AssertUtils的区别注这里的assert指的是java关键字assert。AssertUtils指的是封装后Assert工具如spring的Assert类。对比下就比较清楚了—assertAssertUtils是否受环境限制受环境限制默认是关闭不受环境限制报错异常类型为java.lang.AssertionError,Exception捕获不到(这也挺坑的因为一般try catch都是用Exception)异常类型为java.lang.IllegalArgumentException,Exception可以捕获到这就一目了然了assert不好用推荐用Assert工具。Assert工具为什么不受断言开关的影响呢?看下实现代码就明白了Assert工具是用代码模拟出了assert的效果并没有用到assert关键字所以不受assert开关的影响。spring Assert的使用AssertUtils有很多组织都实现了如spring、apache、hutools等。简单看了下spring的用着就可以又不用引入额外包所以就以spring的Assert类为例。判断字符串是否为空用hasLength() 注不是notEmpty()因为notEmpty方法是给数组用的。spring只有Assert这一个实现类吗?自定义断言工具有时第三方提供的断言工具功能不满足我们的要求怎么办?其实可以大胆一点跳出第三方的限制直接自定义工具。因为实现原理很清晰就是校验不通过抛出IllegalArgumentException即可。想通这一点思路一下子宽了很多。另外如果不想把异常分的太细直接捕获Exception也是可以的。自定义断言工具代码也是网上通用的代码/* * 定制断言工具 */publicclassCustomAssertUtils{publicstaticvoidisNotEmpty(Stringstring,Stringmessage){if(!StringUtils.isNotEmpty(string)){thrownewIllegalArgumentException(message);}}publicstaticvoidisSuccess(booleanb,Stringmessage){if(!b){thrownewIllegalArgumentException(message);}}publicstaticvoidcollectionIsNotEmpty(Collectioncollection,Stringmessage){if(CollectionUtils.isEmpty(collection)){thrownewIllegalArgumentException(message);}}publicstaticvoidcollectionIsEmpty(Collectioncollection,Stringmessage){if(!CollectionUtils.isEmpty(collection)){thrownewIllegalArgumentException(message);}}publicstaticvoidobjectIsNotNull(Objectobject,Stringmessage){if(ObjectUtils.isEmpty(object)){thrownewIllegalArgumentException(message);}}publicstaticvoidobjectIsNull(Objectobject,Stringmessage){if(!ObjectUtils.isEmpty(object)){thrownewIllegalArgumentException(message);}}}ReturnAssert工具有时需要return 写if太难看了booleanbReturnAssert.collectionIsEmpty(newArrayList(),message:);if(!b)returnresult;booleanbReturnAssert.collectionIsEmpty(newArrayList(),message:);if(!b)returnresult;

相关新闻

CUDA实践(1)--性能分析工具

CUDA实践(1)--性能分析工具

本文记录几种CUDA实践中常用的运行计时和性能分析工具。1. 运行计时虽然标准C语言也有相关计时方法,但是由于CPU与GPU之间的同步问题可能造成测时不准确,这里分别介绍这两种测试方法:(1)标准C语言计时函数C语言当前版本…

2026/7/28 21:39:00阅读更多 →
高效学习新技术:系统化方法与工具链实践

高效学习新技术:系统化方法与工具链实践

1. 项目概述 作为一名长期活跃在技术社区的从业者,我经常收到读者关于如何高效学习新技术的咨询。今天我想分享一个近期完成的创新实训项目中的学习方法论,这是我经过多年实践总结出的一套系统化学习方案。 这个学习体系的核心在于将碎片化的知识获取转…

2026/7/28 21:39:00阅读更多 →
基于Codex与提示工程实现AI文本风格化:以“摇曳鳗的一舞”为例

基于Codex与提示工程实现AI文本风格化:以“摇曳鳗的一舞”为例

最近在尝试将AI生成的内容与特定风格结合时,遇到了一个有趣的挑战:如何让一个通用的代码生成模型(比如Codex)去模仿一种极具特色和氛围感的网络文化风格,例如“摇曳鳗的一舞”。这不仅仅是简单的文本改写,更…

2026/7/28 21:39:00阅读更多 →
11,000+安全漏洞检测模板:Nuclei Templates终极实战指南

11,000+安全漏洞检测模板:Nuclei Templates终极实战指南

11,000安全漏洞检测模板:Nuclei Templates终极实战指南 【免费下载链接】nuclei-templates Community curated list of templates for the nuclei engine to find security vulnerabilities. 项目地址: https://gitcode.com/GitHub_Trending/nu/nuclei-templates …

2026/7/28 22:45:21阅读更多 →
民营企业家EMBA选择指南,看懂港科大EMBA优势

民营企业家EMBA选择指南,看懂港科大EMBA优势

当下民营企业家、企业创始人择校EMBA,普遍面临诸多困惑:内地院校国际化资源薄弱、海外项目适配国内营商场景不足、项目师资与课程参差不齐、校友圈层精准度低等。本文将从全球办学排名、院校办学定位、课程体系、学员圈层、产业资源五大客观维度&#xf…

2026/7/28 22:45:21阅读更多 →
深圳招聘信息发布平台怎么选?人力资源管理师实测:吉鹿力招聘网实战测评

深圳招聘信息发布平台怎么选?人力资源管理师实测:吉鹿力招聘网实战测评

深圳作为大湾区核心城市,聚集海量初创企业、制造业、互联网、商贸服务业。作为 HR,我们每天都面临同一个难题:去哪里发布深圳招聘信息,兼顾成本、人才精准度与沟通效率? 主流招聘平台年费高、简历解锁收费、异地无效简…

2026/7/28 22:45:21阅读更多 →
2026 中小企业 GEO 流量破局:基于高维向量空间对齐与轻量级 RAG 的低门槛 AI 搜索优化工程实战

2026 中小企业 GEO 流量破局:基于高维向量空间对齐与轻量级 RAG 的低门槛 AI 搜索优化工程实战

摘要随着生成式 AI(Perplexity、ChatGPT Search、豆包、Kimi 等)全面接管互联网信息检索入口,传统的搜索引擎优化(SEO)正在遭遇效能瓶颈。特别是对于资源有限的中小企业而言,竞价广告与传统 SEO 带来的线索…

2026/7/28 22:45:21阅读更多 →
Served性能优化实战:基于Boost.ASIO的异步处理最佳实践

Served性能优化实战:基于Boost.ASIO的异步处理最佳实践

Served性能优化实战:基于Boost.ASIO的异步处理最佳实践 【免费下载链接】served A C11 RESTful web server library 项目地址: https://gitcode.com/gh_mirrors/se/served Served是一个基于C11的RESTful Web服务器库,其核心架构采用Boost.ASIO实现…

2026/7/28 22:45:21阅读更多 →
5分钟彻底清理Windows驱动垃圾:DriverStore Explorer终极指南

5分钟彻底清理Windows驱动垃圾:DriverStore Explorer终极指南

5分钟彻底清理Windows驱动垃圾:DriverStore Explorer终极指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你的C盘空间是否莫名其妙地减少?系统启动速度越来越…

2026/7/28 22:43:21阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:29阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:29阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:29阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/28 3:17:03阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →