Java refined type
- #java
- java 的 type system 太垃圾了, 基本上做不了 refined type 的.
只能在创建值和传递值得时候去验证.
- 可以用 validator
- 需要加 pom
```
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.13.Final</version>
</dependency>
```
- 上面那个是 API, 下面那个是实现, 和 hibernate 没什么关系
然后就可以在 field 上面加各种 refine annotation, 例如
```
@Min(2)
@Max(3)
private Integer scale;
```
- 用 spring 的话, 在传递参数的时候会自动检查, 加@Validate 到参数/field 上面
- 也可以手动掉 validate 方法
```
Validator validator = Validation.byDefaultProvider()
.configure()
.messageInterpolator(new ParameterMessageInterpolator())
.buildValidatorFactory()
.getValidator();
- Set<ConstraintViolation<LogisticsBaseConfig>> violations = validator.validate(result);
if (!violations.isEmpty()) {
System.out.println(violations);
}
```