Java参数验证是在执行函数之前,首先验证传入的参数的有效性。这个过程非常重要,因为我们不能保证非法参数。验证的目的是保护函数不接受非法参数,进入无效状态。本文主要从手动验证、断言验证和JSR开始 三个方面对Java参数校验的相关内容进行了深入的阐述。
第一,手动验证 {#title-1}
手工验证是最常用的参数验证方法,主要通过if-else语句或其它逻辑操作符来判断。尽管手工验证方法比较繁琐,但操作起来非常灵活。
public void foo(String name) {
if (name == null || "".equals(name)) {
throw new IllegalArgumentException("name can't be null or empty!");
}
// TODO business logic.
}
例如,如果引入的参数name是空的或空的,则会抛出一个IllegalArgumentException异常。
断言校验二 {#title-2}
断言验证是Java语言本身提供的验证方法。在开发过程中,您可以使用assert关键词来验证某个表达式。如果验证失败,程序将终止。
public void foo(String name) {
assert name != null && !"".equals(name) : "name can't be null or empty!";
// TODO business logic.
}
请注意,在默认情况下,Java是关闭断言校验的,在JVM启动时需要添加-ea参数才能打开。
三、JSR 303注解校验 {#title-3}
JSR 303是Java为Bean验证定义的一组标准,它为我们在对象属性上使用提供了一系列注释,然后通过Validator接口的一个实现来验证Bean。
public class User {
@NotNull
@Size(min = 1, max = 10)
private String name;
// Getters and Setters.
}
在这个例子中,我们注释了User类的name字段,@NotNull表示这个字段不能是null,@Size表示这个字段的长度必须在1和10之间。
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
User user = new User();
Set> violations = validator.validate(user);
for (ConstraintViolationviolation : violations) {
System.out.println(violation.getMessage());
}
上述代码段是利用Validator对User实例进行参数验证,并打印出所有验证失败的提示。