Java @NonNullApi是否包含静态方法?
我将Java @NonNullApi是否包含静态方法?,java,spring,intellij-idea,spring-data,Java,Spring,Intellij Idea,Spring Data,我将@org.springframework.lang.NonNullApi注释放在我的包info.java上,用于存储库接口 @NonNullApi 包…jpa.repository; IntellJ IDEA告诉我们,我的静态方法中的参数(或参数)不需要检查 final类RepositoryUtil{ 静态void doSome(最终标准生成器){ 如果(builder==null){/yes 根据文档,@NonNullApi是“一种常见的Spring注释,用于声明给定包的参数和返回值在默
@org.springframework.lang.NonNullApi
注释放在我的包info.java
上,用于存储库接口
@NonNullApi
包…jpa.repository;
IntellJ IDEA告诉我们,我的静态方法中的参数(或参数)不需要检查
final类RepositoryUtil{
静态void doSome(最终标准生成器){
如果(builder==null){/yes
根据文档,@NonNullApi
是“一种常见的Spring注释,用于声明给定包的参数和返回值在默认情况下被视为不可为null。”
如果RepositoryUtil
是您用@NonNullApi
注释的包的一部分,则其参数和返回值(显然是指其方法的参数和返回值)将不可为null,因此检查null将是多余的
如果builder
参数实际上可以为null,则可以使用@Nullable
对其进行注释,以覆盖您使用@NonNullApi
建立的包默认值
static String s1(Object object) {
if (object == null) {
throw new NullPointerException("object is null");
}
return object.toString();
}
default String i1(Object object) {
if (object == null) {
throw new NullPointerException("object is null");
}
return object.toString();
}
使用我的@SpringBootTest
类
当我执行.s1(null)
时,抛出了NullPointerException
当我执行.i1(null)
时,我得到
java.lang.IllegalArgumentException:SomeProductRepository.i1中的参数对象不能为null
这促使我得出结论,静态方法不算数。你在调用什么对象.i1(null)
on,您是如何定义它的?它可能是某个生成类的实例,该类正在包装您编写的类并抛出IllegalArgumentException
。IntelliJ IDEA告诉您的和您的类实际做的是两件不同的事情。仅注释一个方法不会导致它执行空检查或抛出错误异常。这是向其他组件(如IDEA和Spring)发出的信号,用于将尝试调用null的方法标记为错误。IDEA似乎认为注释应用于静态方法(这与注释文档一致)但是Spring实际上并没有为静态方法实现空检查,这并不奇怪,因为它们不能在生成的包装器类中被重写。