Spring源码中关于@Nullable和@NonNull

看Spring源码的时候能够经常看到这两个注解@Nullable和@NonNull,自己看了一下,简单说一下在自己的理解:

 

  • @Nullable

/**
 *一个通用的Spring注释,用于声明被注释的元素可以在{@code null}下一些情况。
 *利用JSR-305元注释在支持JSR-305的通用工具上指示Java中的可空性,并由Kotlin用来推断Spring API的 
 *可空性。
 *应该在参数,返回值和字段级别上使用。 方法覆盖应该重复父{@code @Nullable}注释,除非它们的行为 
 *不同。
 *可以与{@code @NonNullApi}或{@code @NonNullFields}结合使用,以将默认的不可为空的语义覆 
 *盖为可为空。
 *
 */
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Nonnull(when = When.MAYBE)
@TypeQualifierNickname
public @interface Nullable {
}

 

      如果标注该参数为@Nullable,标识该参数可以为空,也可以不为空;

      同时编译器如IDEA就会自动检测该入参,IDEA不会出现提示,如下图所示:

Spring源码中关于@Nullable和@NonNull_第1张图片

  •  @NonNull
/**
 * 一个通用的Spring注释,用于声明被注释的元素不能为{@code null}。
 * 在支持JSR-305的通用工具上利用JSR-305元注释来指示Java中的可空性,并且Kotlin使用这些工具来 
 * 推断Spring API的可空性。
 * 应该在参数,返回值和字段级别上使用。 方法覆盖
 * 重复父{@code @NonNull}批注,除非它们的行为不同。
 * {@code @NonNullApi}(范围=参数+返回值)和/或{@code @NonNullFields}
 *   (范围=字段)将默认行为设置为不可为空,以避免进行注释
 * {@code @NonNull}使用整个代码库。
 *
 * @author Sebastien Deleuze
 * @author Juergen Hoeller
 * @since 5.0
 * @see NonNullApi
 * @see NonNullFields
 * @see Nullable
 */
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Nonnull
@TypeQualifierNickname
public @interface NonNull {
}

 

 如果该参数标注为@NonNull,标识该参数不能为空,但是也可以传入null,执行也不会报错;

但是IDEA编辑器会出现该参数不能为空的警示,如下图所示:

Spring源码中关于@Nullable和@NonNull_第2张图片

你可能感兴趣的:(Spring,java)