前言
这是我阅读同事代码时发现的一个好办法,它简化了之前的写法,非常高效简洁
介绍
什么是 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) | 对象不为null | IllegalArgumentException |
isNull(Object, String) | 对象必须为null | IllegalArgumentException |
hasText(String, String) | 文本有内容(非空白) | IllegalArgumentException |
hasLength(String, String) | 文本有长度 | IllegalArgumentException |
isTrue(boolean, String) | 条件为true | IllegalArgumentException |
state(boolean, String) | 状态为true | IllegalStateException |
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 |
&spm=1001.2101.3001.5002&articleId=155768936&d=1&t=3&u=5a8a60f5fd644dc6b21c55b0329f7089)
1499

被折叠的 条评论
为什么被折叠?



