更新日期:2022/05/13
ɪz ɪt ðə dɪˈstɔːʃ(ə)n əv hjuːˈmænəti ɔːr ðə kəˈlæps əv məˈræləti ðæt laɪz bɪˈhaɪnd ɔːl ðɪs ?
- 1. Assert 快速开始
- 2. Assert 方法总览
- 3. Assert 使用示例
1. Assert 快速开始
Assert 编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。Spring Assert 断言工具类,通常用于数据合法性检查,帮助校验参数。通过使用 Assert 类方法,我们可以写出我们认为是正确的假设,反之会抛出运行时异常,使复杂的判断变得更加简单。
- 通常的非空判断
if (message == null || message.equls("")) {
throw new IllegalArgumentException("输入信息错误!不能为空!");
}
- Aeesrt 类的非空判断
Assert.notNull(message, "输入信息错误!不能为空!");
2. Assert 方法总览
- Assert.class
都是static方法;
抛出 IllegalArgumentException 或 IllegalStateException 异常;
第一个参数通常是需验证的对象或逻辑条件;
最后参数通常是异常消息,用于验证失败时显示(消息可以作为 String 参数或 Supplier 参数传输)。
方法 | 说明 |
---|---|
state | 断言状态为正确的,如果为 false 则抛出 IllegalStateException |
isTrue | 断言结果为 true,如果为 false 则抛出 IllegalArgumentException |
isNull | 断言一个可为空的对象为 null,如果不为 null 则抛出 IllegalArgumentException |
notNull | 断言一个可为空的对象不为 null,如果为 null 则抛出 IllegalArgumentException |
hasLength | 断言一个可为空的字符串有长度,如果为 null 或者长度为 0 则抛出 IllegalArgumentException |
hasText | 断言一个可为空的字符串有内容,如果为 null 或者长度为 0 或者仅是一个 Java 空白字符则抛出 IllegalArgumentException |
doesNotContain | 断言一个可为空的字符串不包含子字符串,如果两者都有值且主字符串包含子字符串则抛出 IllegalArgumentException |
notEmpty | 断言一个可为空的数组不为 null,如果数组为 null 或者长度为 0 则抛出 IllegalArgumentException |
noNullElements | 断言一个可为空的数组不为 null,如果数组为 null 或者长度为 0 或者有元素但元素为 null 则抛出 IllegalArgumentException |
isInstanceOf | 断言一个可为空的对象是一个类的实例,如果类为 null 或对象不是类的实例则抛出 IllegalArgumentException |
isAssignable | 断言一个子类可以转为父类,如果子类为 null 或子类不能转为父类则抛出 IllegalArgumentException |
3. Assert 使用示例
- public static void state(boolean expression, String message)
校验参数是否具有速度,没有则不能更改状态为 drive。抛出异常:speed must be positive 。
*************************************************************************
public class AssertTest {
private String state = "stop";
.........................................................................
public static void main(String[] args) {
AssertTest at = new AssertTest();
at.drive(-5);
System.out.println(at.state);
}
.........................................................................
public void drive(int speed) {
Assert.state(speed > 0, "speed must be positive");
this.state = "drive";
}
}
【Console】--------------------------------------------------------------
Exception in thread "main" java.lang.IllegalStateException: speed must be positive
at org.springframework.util.Assert.state(Assert.java:76)
at com.ouseki.itgodroad.ToBeSynchronized.AssertTest.drive(AssertTest.java:21)
at com.ouseki.itgodroad.ToBeSynchronized.AssertTest.main(AssertTest.java:16)
*************************************************************************
- public static void state(boolean expression,
Supplier
messageSupplier)
也可以传递一个拉姆达表达式(String 类型)。
*************************************************************************
public class AssertTest {
private String state = "stop";
.........................................................................
public static void main(String[] args) {
AssertTest at = new AssertTest();
at.drive(-5);
System.out.println(at.state);
}
.........................................................................
public void drive(int speed) {
Assert.state(speed > 0, () -> "speed must be positive");
this.state = "drive";
}
}
【Console】--------------------------------------------------------------
Exception in thread "main" java.lang.IllegalStateException: speed must be positive
at org.springframework.util.Assert.state(Assert.java:97)
at com.ouseki.itgodroad.ToBeSynchronized.AssertTest.drive(AssertTest.java:23)
at com.ouseki.itgodroad.ToBeSynchronized.AssertTest.main(AssertTest.java:18)
*************************************************************************
- public static void hasText(@Nullable String text, String message)
校验参数是否为有效的文本。如果文本不含有效内容,抛出异常:IllegalArgumentException 。
*************************************************************************
public class AssertTest {
public static void main(String[] args) {
AssertTest at = new AssertTest();
at.callTheRoll(" ");
}
.........................................................................
public void callTheRoll(String name) {
Assert.hasText(name, "没有内容,请输入有效姓名");
System.out.println(name + " 来上课了。");
}
}
【Console】--------------------------------------------------------------
Exception in thread "main" java.lang.IllegalArgumentException: 没有内容,请输入有效姓名
at org.springframework.util.Assert.hasText(Assert.java:289)
at com.ouseki.itgodroad.ToBeSynchronized.AssertTest.callTheRoll(AssertTest.java:19)
at com.ouseki.itgodroad.ToBeSynchronized.AssertTest.main(AssertTest.java:15)
*************************************************************************
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)