提示四十九:检查参数的有效性。
- 方法的参数限制,应该在文档中指明,并且在方法体的开头处检查参数,以强制施加这些限制。
- 如果没有进行参数限制,最严重的会导致改变破坏了对象的状态,并在其它使用了被破坏的对象的时候抛出了异常。
-
Objects
类提供了一些检查校验的方法,比如Java7的Objects.requireNonNull
,Java9的checkFromIndexSize
,checkFromToIndex
等等。 - 对于有一些参数,方法本身没有用到,但是却被保存起来供以后使用,校验这类参数尤为重要。比如构造方法和set方法。
- 假设方法对于它能接受的所有参数值都能合理的完成工作,对参数的限制就应该越少越好。
我们系统中关于参数校验也存在问题,特别是在接口逻辑中,可能有一套统一的逻辑来校验更好,我这边尝试引入了一些外部包,可以通过注解的方式来实现。
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
@Valid
@Size(min = 7, max = 11, message = "长度必须大于等于7或小于等于11")
private String companyId4CF;
ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); //create bean
Validator validator = factory.getValidator();
Set<ConstraintViolation<CommonCustomizedFieldCriteria>> validate = validator.validate(criteria);
validate.forEach(action -> System.out.println(action.getMessage()));