これは、Bean Validation 1.0 の既知のユーザビリティの問題です。この問題は、問題BVAL-198「ConstraintViolationExceptions の作成を簡素化する」によって、 Bean Validation 1.1で対処されました。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 を使用している間の修正は、次のSet<ConstraintViolation<?>>
代わりに a を渡すことでしたSet<ConstraintViolation<Sample>>
。
throw new ConstraintViolationException(
new HashSet<ConstraintViolation<?>>(violations));