Ich möchte standard javax.validation für Eigenschaften und meine eigene Validierung für funktionale Validierungen verwenden. Die vereinfachte Unterklasse wie folgt aussieht:Wie verwende ich javax.validation (JSR303) für eine Basisklasse?
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;
}
}
Dies ist die Basisklasse:
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;
}
Gibt dem Fehler Mismatch
Typ: kann nicht von Set < ConstraintViolation <AbstractData> > konvertieren Set < EinschränkungViolation <? > >
Es gibt keine Möglichkeit für den Compiler, den generischen Typ so abzuleiten, wie Sie es getan haben. – dambros
Sie haben Recht. Der Compiler kann nicht von AbstractData in? Konvertieren. Aber wie kann ich diese Pseudo-Typ-Sicherheit loswerden? Es scheint mir, dass die Schnittstelle Validator.validate nur schlecht entworfen ist. Oder ich verstehe es einfach nicht ... –