这是 Bean Validation 1.0 中的一个已知可用性问题。此问题已在Bean Validation 1.1中的问题BVAL-198 “简化 ConstraintViolationExceptions 的创建”中得到解决。升级到 Bean Validation 1.1 或更高版本将允许您的代码按照编写的方式编译。
具体问题是ConstraintViolationException
构造函数接受Set<ConstraintViolation<?>>
了他们的constraintViolations
参数。由于Set<ConstraintViolation<Sample>>
不是 的子类型Set<ConstraintViolation<?>>
,因此无法将其传递给构造函数,尝试这样做时会发生编译错误。
Bean 验证 1.1.0将构造函数更改为 accept Set<? extends ConstraintViolation<?>>
。由于这是 的超类型Set<ConstraintViolation<Sample>>
,因此可以直接将其传递给构造函数。
如另一个答案中所述,仍在 Bean Validation 1.0 上的修复是传入 aSet<ConstraintViolation<?>>
而不是Set<ConstraintViolation<Sample>>
:
throw new ConstraintViolationException(
new HashSet<ConstraintViolation<?>>(violations));