İşlevler için standart javax.validation ve işlev doğrulamaları için kendi doğrulamamı kullanmak istiyorum.javax.validation (JSR303) bir temel sınıfta nasıl kullanılır?
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;
}
}
Bu temel sınıftır:: gibi basitleştirilmiş alt sınıf görünüyor
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;
}
hatayı
Tip uyuşmazlığı verir: Set ayarlama < ConstraintViolation <AbstractData> > gelen dönüştürülemiyor < ConstraintViolation <? >
Derleyicinin, yaptığınız gibi jenerik türden çıkmasının bir yolu yoktur. – dambros
Haklısınız. Derleyici, AbstractData'dan? 'A dönüşemez. Ama bu sözde-tip-güvenlikten nasıl kurtulabilirim? Bana öyle geliyor ki, Validator.validate arabirimi çok kötü tasarlanmış. Ya da sadece anlamadım ... –