プロパティの標準javax.validationと機能検証のための独自の検証を使いたいと思います。単純化されたサブクラスは以下のようになります。ベースクラスでjavax.validation(JSR303)を使用するにはどうすればよいですか?
public class TestData extends AbstractData {
@NotNull
Long id = null;
@NotNull
Long value = null;
public Set<ConstraintViolation<TestData>> validateFunctional() {
Set<ConstraintViolation<TestData>> violations = new HashSet<>();
if (id < 42 || value > 4711) {
//--- here comes another question: how do I create a constraint violation?
}
return violations;
}
}
これは、基本クラスである:
public abstract class AbstractData {
public Set<ConstraintViolation<?>> validate() {
//--- First validate single properties
Set<ConstraintViolation<?>> violations = validator.validate(this);
}
//--- Single props OK => validate functional
if (violations.isEmpty()) {
violations.add(validateFunctional());
}
return violations;
}
はエラーに
型の不一致を与える:セットする> AbstractData > ConstraintViolation <セット<から変換することはできません<制約違反<? > >
コンパイラがジェネリック型を推論する方法はありません。 – dambros
あなたは正しいです。コンパイラはAbstractDataから?に変換できません。しかし、この疑似型安全をどうやって取り除くことができますか? Validator.validateというインタフェースはひどく設計されているようです。または私はそれを得ることはありません... –