断言工具 - Assert
# 断言工具 - Assert
简介
在Java中,
assert
关键字用于调试和测试,但其局限性和误用风险较高。例如,它在默认情况下是关闭的,必须显式在运行时通过参数启用;此外,assert
关键字的误用可能会导致不稳定的程序逻辑。因此,Hutool
提供了一个更灵活且更加安全的断言工具类Assert
,用于在方法和流程中进行条件判断和参数校验。Assert
类的设计理念类似于 JUnit 的Assert
和 Guava 的Preconditions
,通过对方法参数进行校验,在不满足条件时抛出异常,如IllegalArgumentException
或IllegalStateException
。在实际开发中,它广泛用于业务逻辑校验、方法参数检查和防御性编程。
# 1. isTrue(boolean expression, String message)
判断表达式是否为 true
,如果为 false
,则抛出 IllegalArgumentException
异常。
# 示例:验证表达式为 true
import cn.hutool.core.lang.Assert;
public class AssertExample {
public static void main(String[] args) {
int age = 18;
// 判断 age 是否大于等于 18
Assert.isTrue(age >= 18, "年龄必须大于或等于 18");
System.out.println("校验通过!");
}
}
2
3
4
5
6
7
8
9
10
11
12
- 作用:用于条件判断,确保表达式满足要求,否则抛出异常。
- 实际开发场景:常用于业务逻辑中判断用户输入是否合法,如年龄、价格、数量等。
# 2. isNull(Object object, String message)
判断对象是否为 null
,如果不为 null
,则抛出 IllegalArgumentException
异常。
# 示例:验证对象是否为 null
import cn.hutool.core.lang.Assert;
public class AssertExample {
public static void main(String[] args) {
String str = null;
// 判断 str 是否为 null
Assert.isNull(str, "字符串必须为 null");
System.out.println("校验通过!");
}
}
2
3
4
5
6
7
8
9
10
11
12
- 作用:用于对象为空的校验,避免不必要的逻辑处理。
- 实际开发场景:用于判断未初始化的对象,或在资源释放后检查对象是否被清空。
# 3. notNull(Object object, String message)
判断对象是否不为 null
,如果为 null
,则抛出 IllegalArgumentException
异常。
# 示例:验证对象是否不为 null
import cn.hutool.core.lang.Assert;
public class AssertExample {
public static void main(String[] args) {
String str = "Hello";
// 判断 str 是否不为 null
Assert.notNull(str, "字符串不能为 null");
System.out.println("校验通过!");
}
}
2
3
4
5
6
7
8
9
10
11
12
- 作用:用于对象不为空的校验,避免空指针异常(
NullPointerException
)。 - 实际开发场景:常用于方法参数校验,确保传入的参数不为
null
。
# 4. notEmpty(Object[] array, String message)
判断数组是否不为空,如果为空或为 null
,则抛出 IllegalArgumentException
异常。
# 示例:验证数组是否不为空
import cn.hutool.core.lang.Assert;
public class AssertExample {
public static void main(String[] args) {
String[] array = {"A", "B", "C"};
// 判断数组是否不为空
Assert.notEmpty(array, "数组不能为空");
System.out.println("校验通过!");
}
}
2
3
4
5
6
7
8
9
10
11
12
- 作用:用于集合或数组不为空的校验,避免空集合或空数组的处理逻辑。
- 实际开发场景:常用于方法中处理列表或数组数据,确保有足够的数据进行操作。
# 5. notBlank(CharSequence text, String message)
判断字符串是否不为空白(包含 null
、空字符串、全空格字符串),如果为空白,则抛出 IllegalArgumentException
异常。
# 示例:验证字符串是否不为空白
import cn.hutool.core.lang.Assert;
public class AssertExample {
public static void main(String[] args) {
String text = " Hutool ";
// 判断字符串是否不为空白
Assert.notBlank(text, "字符串不能为空白");
System.out.println("校验通过!");
}
}
2
3
4
5
6
7
8
9
10
11
12
- 作用:用于字符串内容的校验,确保字符串包含有效的字符。
- 实际开发场景:常用于用户输入的校验,如用户名、密码、地址等。
# 6. isInstanceOf(Class<?> type, Object obj, String message)
判断对象是否为指定类型的实例,如果不是,则抛出 IllegalArgumentException
异常。
# 示例:验证对象是否为指定类型
import cn.hutool.core.lang.Assert;
public class AssertExample {
public static void main(String[] args) {
Object number = 123;
// 判断对象是否为 Integer 类型
Assert.isInstanceOf(Integer.class, number, "对象必须是 Integer 类型");
System.out.println("校验通过!");
}
}
2
3
4
5
6
7
8
9
10
11
12
- 作用:用于类型安全的校验,确保对象是预期的类型。
- 实际开发场景:在反射操作或泛型转换中,确保对象类型正确。
# 7. state(boolean expression, String message)
判断状态表达式是否为 true
,如果为 false
,则抛出 IllegalStateException
异常。
# 示例:验证状态是否有效
import cn.hutool.core.lang.Assert;
public class AssertExample {
public static void main(String[] args) {
boolean isActive = true;
// 判断状态是否为 true
Assert.state(isActive, "系统状态无效");
System.out.println("校验通过!");
}
}
2
3
4
5
6
7
8
9
10
11
12
- 作用:用于状态判断,确保系统或对象处于有效状态。
- 实际开发场景:在系统状态或业务流程中,确保状态符合预期,防止错误操作。
总结
Assert
工具类提供了丰富的断言方法,用于在程序中进行参数校验、业务逻辑判断和防御性编程。通过使用 Assert
,我们可以在代码中提前发现问题,减少不必要的异常和错误,提升代码的健壮性和可维护性。