Java参数校验用法介绍


Java参数验证是在执行函数之前,首先验证传入的参数的有效性。这个过程非常重要,因为我们不能保证非法参数。验证的目的是保护函数不接受非法参数,进入无效状态。本文主要从手动验证、断言验证和JSR开始 三个方面对Java参数校验的相关内容进行了深入的阐述。

第一,手动验证

手工验证是最常用的参数验证方法,主要通过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异常。

断言校验二

断言验证是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注解校验

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实例进行参数验证,并打印出所有验证失败的提示。

评论关闭