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是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实例进行参数验证,并打印出所有验证失败的提示。
本文链接:http://task.lmcjl.com/news/1325.html