当前位置: 首页 > news >正文

Java陷阱之assert关键字详解

Assert.isTrue()方法用于断言条件是否为真,如果条件不满足(即为false),则会抛出IllegalArgumentException,并附带预设的错误信息。在示例中,当1.23不小于2.23时,方法抛出了异常,显示1.23小于2.23。此方法常用于单元测试中确保代码行为符合预期。

Assert.isTrue(express,message) 是指测试指定的条件是否为True,如果为True,则测试通过,如果表达式express为false,则才输出信息。 

示例代码如下:

public class AssertDemo {public static void main(String[] args) {Double num = new Double(1.23);Assert.isTrue(num.compareTo(new Double(2.23)) == 1, "1.23小于2.23");}
}

运行结果如下:

Exception in thread "main" java.lang.IllegalArgumentException: 1.23小于2.23at org.springframework.util.Assert.isTrue(Assert.java:116)at org.sang.test.AssertDemo.main(AssertDemo.java:15)

我们查看下Assert.isTrue()源码:

 public static void isTrue(boolean expression, String message) {if (!expression) {throw new IllegalArgumentException(message);}}

发现,当expression为true时则通过,不发生异常,当expression为false时,则会抛出异常。

一、org.springframework.util.Assert断言工具类

1 对象和类型断言
  • notNull(Object object, String message):入参一定不是 null;
  • isNull(Object object, String message):入参一定是 null;
  • isInstanceOf(Class type, Object obj, String message):检查对象必须为另一个特定类型的实例
public void сhangeEngine(Engine engine) {Assert.isInstanceOf(ToyotaEngine.class, engine);// ToyotaEngine 是类 Engine的子类,可以通过
}
  • isAssignable(Class superType, Class subType, String message):subType 必须可以按类型匹配于 superType
2 文本断言

通常用来检查字符串参数。

  • hasLength(String text, String message):当 text 为 null 或长度为 0 时抛出异常,空格算长度为1;
  • hasText(String text, String message):text 不能为 null 且必须至少包含一个非空格的字符,否则抛出异常;

两者都区别:
hasLength(String text)文本为空格时不会抛出异常,但是hasText(String text)在空格的时候会抛出异常。

3 集合断言
  •  notEmpty(Collection collection, String message):当集合未包含元素时抛出异常。

二、同一异常捕获 

 因为Spring断言机制都会对未通过判断的地方抛出异常,所以,我们需要集中对这些异常进行捕获处理。采用AOP的方式,部分示例代码如下:

try {...} catch (IllegalArgumentException ill) {logger.error(ill.getMessage());;return null;} catch (Throwable throwable) {logger.error(throwable.getMessage());return null;}

http://www.dtcms.com/a/278280.html

相关文章:

  • 使用layui的前端框架过程中,无法加载css和js怎么办?
  • 谷歌开源库gtest 框架安装与使用
  • CentOS系统哪些版本?分别适用于那些业务或网站类型?
  • 2025年Java后端社招面试:高频场景题+八股文面试题解析
  • toString
  • S7-1200 中 AT 覆盖参数的应用:灵活访问数据区域的实用指南
  • 借助DeepSeek编写输出漂亮表格的chdb客户端
  • 电流驱动和电压驱动的区别
  • Rust语言实战:LeetCode算法精解
  • iOS高级开发工程师面试——RunLoop
  • FRP Ubuntu 服务端 + MacOS 客户端配置
  • 安装llama-factory报错 error: subprocess-exited-with-error
  • Kubernetes的微服务
  • c语言内存函数以及数据在内存中的存储
  • linux 文件搜索与文件内容查看
  • 嵌入式硬件篇---单稳态多谐施密特电路
  • CISSP通过回顾
  • Java Integer包装类缓存机制详解
  • uni-app 选择国家区号
  • AI与基础设施
  • 微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态
  • 基于光栅传感器+FPGA+ARM的测量控制解决方案
  • Quasar组件库
  • 2025最新android面试指南
  • vue3+arcgisAPI4示例:自定义多个气泡窗口展示(附源码下载)
  • [源力觉醒 创作者计划]_文心大模型4.5开源部署指南:从技术架构到实战落地
  • 知天命的感悟
  • 深入了解linux系统—— 进程信号的保存
  • 1688商品详情接口逆向分析与多语言SDK封装实践
  • Datawhale AI夏令营-基于带货视频评论的用户洞察挑战赛