For simpler ConstraintValidators which ignore null cases and don't need to initialise constraintAnnotation there is a lot of boilerplate that could be simplified with a base class or interface with default methods:
{code} public class FooValidator implements ConstraintValidator<Foo, Bar> {
// boilerplate @Override public void initialize(Foo constraintAnnotation) { }
@Override public boolean isValid(Bar value, ConstraintValidatorContext context) {
// boilerplate if (value == null) { return true; }
// validation logic } } {code}
For this case it would be nice if there was something like:
{code} @FunctionalInterface public interface SimpleConstraintValidator<A extends Annotation, T> extends ConstraintValidator<A, T> {
@Override default void initialize(A constraintAnnotation) {
}
@Override default boolean isValid(T value, ConstraintValidatorContext context) {
if(value == null) { return true; }
return isValid(value); }
boolean isValid(T value); } {code} In that case first implementation would be a lot more concise: {code} public class FooValidator implements SimpleConstraintValidator<Foo, Bar> {
@Override public boolean isValid(Bar value) { // validation logic } } {code} |
|