Assert(断言工具类)

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

前言

这是我阅读同事代码时发现的一个好办法,它简化了之前的写法,非常高效简洁

介绍

什么是 Assert?

Assert 是 Spring Framework 提供的一个参数验证工具类,位于 org.springframework.util 包中。它用于在方法开始时验证参数的有效性,如果验证失败,会抛出 IllegalArgumentException 或 IllegalStateException

设计思想

防御性编程

  • 尽早失败:在方法开始时就发现问题

  • 明确错误:提供清晰的错误信息

  • 简化代码:一行代码完成复杂的验证

契约式设计

  • 前置条件:方法执行前必须满足的条件

  • 后置条件:方法执行后必须保证的结果

  • 不变量:在整个执行过程中保持不变的属性

常用方法

1. 对象验证方法

notNull() - 对象不能为 null

验证传入的对象

参数是否为空,如果为空就报IllegalArgumentException异常

// 验证对象不为null
Assert.notNull(object, "对象不能为null");

// 等效的传统写法:
if (object == null) {
    throw new IllegalArgumentException("对象不能为null");
}

isNull() - 对象必须为 null

相对于notNull(),isNull()完全相反,它是验证传入的参数必须为空才行

// 验证对象必须为null(较少使用)
Assert.isNull(object, "对象必须为null");

2. 文本验证方法

hasText() - 文本必须有内容

验证传入的字符串参数是否有值

// 验证字符串不为null、不为空、不只包含空白字符
Assert.hasText(str, "字符串不能为空");

// 等效于:
if (str == null || str.trim().isEmpty()) {
    throw new IllegalArgumentException("字符串不能为空");
}

扩展:传统方法中的trim()方法是String类的一个方法,作用是去除字符串两端的空白字符,然后会创建一个新的字符串

hasLength() - 文本必须有长度

顾名思义,就是验证文本不为空,但允许空格

// 验证字符串不为null且长度大于0(允许空格)
Assert.hasLength(str, "字符串必须有长度");

3. 布尔条件验证

isTrue() - 条件必须为真

// 验证表达式为true
Assert.isTrue(age > 0, "年龄必须大于0");
Assert.isTrue(collection.size() > 0, "集合不能为空");

也可以跟其他方法混合使用,比如hasLength(),验证文本的长度是否在一个区间等等

state() - 状态验证

// 验证对象状态(通常用于验证方法调用顺序)
Assert.state(!initialized, "对象已初始化,不能重复初始化");

4. 集合和数组验证

notEmpty() - 集合/数组不能为空

// 验证集合不为null且包含元素
Assert.notEmpty(collection, "集合不能为空");

// 验证数组不为null且长度>0
Assert.notEmpty(array, "数组不能为空");

noNullElements() - 集合中不能有null元素

// 验证集合中所有元素都不为null
Assert.noNullElements(collection, "集合中不能包含null元素");

完整方法

方法作用异常类型
notNull(Object, String)对象不为nullIllegalArgumentException
isNull(Object, String)对象必须为nullIllegalArgumentException
hasText(String, String)文本有内容(非空白)IllegalArgumentException
hasLength(String, String)文本有长度IllegalArgumentException
isTrue(boolean, String)条件为trueIllegalArgumentException
state(boolean, String)状态为trueIllegalStateException
notEmpty(Collection, String)集合不为空IllegalArgumentException
notEmpty(Map, String)Map不为空IllegalArgumentException
notEmpty(Object[], String)数组不为空IllegalArgumentException
noNullElements(Collection, String)集合无null元素IllegalArgumentException
noNullElements(Object[], String)数组无null元素IllegalArgumentException
isInstanceOf(Class, Object, String)对象是指定类型IllegalArgumentException
isAssignable(Class, Class, String)类是超类/接口IllegalArgumentException

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值