gpt4 book ai didi

java - Java 约束的执行顺序是什么

转载 作者:行者123 更新时间:2023-12-04 09:32:26 27 4
gpt4 key购买 nike

我有一个 Java 方法,其中方法本身用约束(交叉参数)注释,并且参数也用约束(@NotNull、@NotEmpty 等)注释。
方法约束是在方法参数验证之后验证还是未指定验证顺序?

最佳答案

注释本身并没有做任何事情。他们只是标记事物。 javac自己知道什么@Deprecated@Override@FunctionalInterface意思是,但效果总是要么什么都不做,要么生成编译器错误:这些注释不会导致编译器生成任何代码。
除了 Project Lombok这是注释的一般原则,甚至 Project Lombok 也是一个注释处理器:您必须在编译期间将 lombok 放在类路径中,否则什么也不会发生。
换句话说,这是不可能的对于@NonNull代码中的注释以自行生成任何空检查。约束在其他地方应用,或者由生成注释处理器的代码应用,您通过将其放在类路径上或将其作为注释处理器传递来显式包含它。例如,您调用的代码可能会内省(introspection)您的方法并注意一些事情。因此,您可以例如:

class Example {
@NotEmpty String name;
}
然后你可以这样做:
new Example("");
这不会导致异常。但你可以这样做:
Validator validator = SomeHypotheticalValidationLibrary.newValidator();
validator.validate(new Example(""));
然后这个 validator 会产生一个错误,说明你提供的实例验证失败。这是一个自省(introspection)注解的例子。
现在回答你的问题:
验证此类约束的顺序完全取决于您用于进行验证的验证库;开箱即用,注释本身不会也不能生成任何验证代码。您必须检查验证库的文档,并提供您正在验证的上下文。
如果您专门谈论 Lombok 的 @NonNull - lombok 扫描您的代码以进行空值检查(形式为 if (x == null) throw new Something(); 或形式为 Objects.nullCheck 或 guava 的空值检查)。如果它发现 @NonNull 的空检查带注释的参数,lombok 什么都不做。如果没有,它会在所有显式空检查后生成空检查。一旦 Lombok 遇到不是空检查的行(因此,既不是 if (x == null) 也不是 methodInvocation(x, "optional text"); ),Lombok 就会停止扫描空检查。 @NonNull是目前唯一导致 lombok 生成验证码的注解(没有 @lombok.NotEmpty )。
如果您解释您正在使用哪些注释处理器/验证框架,我们或许能够提供更多见解。

关于java - Java 约束的执行顺序是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62776986/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com