我将这个功能接口定义为:
@java.lang.FunctionalInterface
interface Foo
{
@javax.validation.constraints.NotNull Bar getBar()
}
这里的问题是,覆盖getBar()
的子类型(lambdas,...)似乎不受不可为空约束的约束。
对此有哪些实际解决方案?
答案 0 :(得分:0)
请准确,因为您的观察结果与公认的答案here直接冲突。 似乎不受限制不是很精确,要么是,要么不是。
javax.validation.constraints.@NotNull
是一个JSR验证,因此它应包含在以上答案中。如果不是,则可能尝试在该答案中添加注释。
我建议发布您的驱动程序/设置,因为我怀疑jsr bean验证程序可能不会在您的实例化中被调用。
您应该理解,以上答案中列出的此特定行为非常特定于bean验证注释处理器,并且与Java中的常规注释继承无关。
只是一个话题,但试图包括这些答案以了解Java中的注释继承,
Answer -4 Spring MVC Validations
仅作说明,直到第-行Bar bar = foo.getBar();
都没有错误消息,但是当我将其通过验证器时,对于父母和孩子,我都会得到消息-bar- may not be null
@java.lang.FunctionalInterface
public interface FooChild extends Foo {
}
和驱动程序
import java.util.Set;
import javax.validation.Configuration;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
public class DriverProgram {
public static void main(String[] args) {
Foo foo = () -> {
return null;
};
Bar bar = foo.getBar();
Configuration<?> config = Validation.byDefaultProvider().configure();
ValidatorFactory factory = config.buildValidatorFactory();
Validator validator = factory.getValidator();
factory.close();
Set<ConstraintViolation<Foo>> violations = validator.validate(foo);
violations.forEach(v -> System.out.println(v.getPropertyPath() + "- " + v.getMessage()));
FooChild fooChild = () -> {
return null;
};
bar = fooChild.getBar();
violations = validator.validate(fooChild);
violations.forEach(v -> System.out.println(v.getPropertyPath() + "- " + v.getMessage()));
}
}