当一个类实现了某接口或者继承了某类的时候,父类型的约束将会被子类型继承。
- 父类
public class Car {
private String manufacture;
private int seatCount;
@NotNull(message = "制造商不能为空")
public String getManufacture() {
return manufacture;
}
public void setManufacture(String manufacture) {
this.manufacture = manufacture;
}
@Min(value = 2, message = "座位数量不能小于2")
public int getSeatCount() {
return seatCount;
}
public void setSeatCount(int seatCount) {
this.seatCount = seatCount;
}
}
- 子类
public class RentalCar extends Car {
private String rentalStation;
private int seatCount;
@NotNull(message = "租赁站不能为空")
public String getRentalStation() {
return rentalStation;
}
public void setRentalStation(String rentalStation) {
this.rentalStation = rentalStation;
}
@Max(value = 5, message = "座位数量不能大于5")
@Override
public int getSeatCount() {
return seatCount;
}
@Override
public void setSeatCount(int seatCount) {
this.seatCount = seatCount;
}
}
- 测试
@Test
public void inheritanceConstraintVer1Test() {
RentalCar rentalCar = new RentalCar();
// 违反了来自父类的约束
rentalCar.setManufacture(null);
rentalCar.setRentalStation(null);
// 父类和子类的约束可以累加
rentalCar.setSeatCount(1);
Set<ConstraintViolation<RentalCar>> constraintViolations = validator.validate(rentalCar);
logger.info("违反的约束的个数:{}", constraintViolations.size());
for (ConstraintViolation<RentalCar> constraintViolation : constraintViolations) {
logger.info("违反的约束:{}", constraintViolation.getMessage());
}
logger.info("---------------------------");
// 父类和子类的约束可以累加
rentalCar.setSeatCount(6);
constraintViolations = validator.validate(rentalCar);
logger.info("违反的约束的个数:{}", constraintViolations.size());
for (ConstraintViolation<RentalCar> constraintViolation : constraintViolations) {
logger.info("违反的约束:{}", constraintViolation.getMessage());
}
}
- 查看
知识点有2个:
- 子类型可以继承父类型定义的约束,比如例子中的manufacture的约束;
- 约束是累加生效的,比如例子中的seatCount的约束;
注意:本文使用的是property级别的约束,我们看到,打印的结果显示违反的约束的结果是3个;下一篇博客我们使用field级别的约束对比一下,发现违反的约束是4个。