林子豪的 PKM
← 返回形式化验证专题

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);

}

```