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