Spring:@Nullable和@NonNull

1 前言

Spring的注解@Nullable,@NonNull在spring的核心包spring-core中,注解部分代码如下:

@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Nonnull(when = When.MAYBE
)
@TypeQualifierNickname
public @interface Nullable {}
@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Nonnull
@TypeQualifierNickname
public @interface NonNull {}

可知注解均可修饰字段、方法和参数,作用是,@Nullable修饰字段、方法和参数,那么字段可为null,方法返回值可为null,参数可为null;@NonNull修饰字段、方法和参数,那么字段不可为null,方法返回值不可为null,参数不可为null。并且对于两个注解,Primitive type members cannot be annotated,即原始类型(byte\long\int\short\boolean\float\double)不可使用此注解修饰,所以比如返回值为void或者int等的方法,int、boolean等类型的字段、参数,都不可使用这两个注解。引用对象,如String、BigDecimal、自定义类对象等,可以使用这两个注解修饰。

2 使用

package com.xiaoxu.base;import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;import java.math.BigDecimal;/*** @author xiaoxu* @date 2022-02-18* Ymybatis:com.xiaoxu.base.MyNull*/
public class MyNull {@Nullableprivate String a;@NonNullprivate String b;MyNull(@NonNull String b){this.b = b;}@NullableBigDecimal run(){System.out.println(this.a);System.out.println(this.b);return null;}@NonNullString print(@NonNull String a,@Nullable String b){System.out.println("我是print"+a+b);return null;}public static void main(String[] args) {MyNull m = new MyNull("12");m.run();m.print("a","b");//@NonNull修饰的(均为引用对象才可使用其修饰)字段,不能为null,参数不能为null,方法返回值不能为null//否则会有标黄提示(弱提示),代码可正常运行MyNull m1 = new MyNull(null);String x = null;m1.run();m1.print(x,null);}
}

执行结果如下所示:

null
12
我是printab
null
null
我是printnullnull

idea代码标黄,弱提示:


可知,@Nullable和@NonNull修饰引用类型的字段、参数,以及返回值为引用类型的方法,且仅是弱提示,实际代码依然可以正常运行。

Spring:@Nullable和@NonNull相关推荐

  1. Spring注解@NonNull作用 Spring注解@Nullable作用 Spring NonNull 注解作用 Spring Nullable注解作用

    Spring注解@NonNull作用 Spring注解@Nullable作用 Spring NonNull 注解作用 Spring Nullable注解作用 一.概述 在看Spring源码的时候,经常 ...

  2. 安卓中的@Nullable和NonNull(NotNull) 等 注释

    @Nullable和NonNull(NotNull) 这些注解是用来标注方法是否能传入null值,如果可以传入NUll值,则标记为nullbale,如果不可以则标注为Nonnull. 在我们做了一些不 ...

  3. 关键字nullable,nonnull,null_resettable,_Null_unspecified详解

    相信在开发过程中,很多小伙伴们儿都会见到nullable,nonnull,null_resettable,_Null_unspecified 这几个关键字,但是并不知道它们是什么意思,下面我就给大家一 ...

  4. iOS关键字之nullable、nonnull、null_resettable、_Null_unspecified的区别

    nullable.nonnull.null_resettable._Null_unspecified是iOS9.0出现的新的修饰关键词,下面我们来研究一下它们之间的区别. 一 共同点 1.可以进行代码 ...

  5. java nullable_java – 如何更有效地使用@Nullable和@Nonnull注释?

    我可以看到@Nullable和@Nonnull注释可能有助于防止NullPointerExceptions,但他们不传播非常远. >这些注释的有效性在一个水平的间接之后完全下降,因此如果你只添加 ...

  6. Spring之@Nullable、@NonNull注解

    @NonNull可以标注在方法.字段.参数之上,表示对应的值不可以为空 @Nullable注解可以标注在方法.字段.参数之上,表示对应的值可以为空 以上两个注解在程序运行的过程中不会起任何作用,只会在 ...

  7. _nullable、nullable、nonnull区别

    1.nonnull:字面意思就能知道:不能为空(用来修饰属性,或者方法的参数,方法的返回值) //三种使用方式都可以2 @property (nonatomic, copy, nonnull) NSS ...

  8. nullable、nonnull、__nullable、__nonnull、_Nullable、__Nonnull 的区别

    在苹果自己的API中, 我们也见过许多的参数的修饰符, 比如说在方法中修饰参数可否为空的标识.今天来总结下 nullable, nonnull, __nullable, __nonnull, _Nul ...

  9. iOS新增关键字 nonnull、nullable等相关

    1,nonnull和nullable 声明属性是否可以为nil,如果对nonnull属性赋值为nil,则会报警告. 1 2 3 @property (nonatomic, strong, nonnul ...

最新文章

  1. 还在为入门深度学习发愁吗?其实你只需要一周的时间
  2. splunk的bucket组织目录——时间序列,按照时间来组织目录
  3. [three.js]学习笔记
  4. 关于Ajax 错误:'sys'未定义解决方法.
  5. java线程:互斥锁与读写锁
  6. 十分钟了解分布式计算:Spark
  7. c语言程序设计科学出版色,C语言程序设计9787030330123张淑华科学出版社
  8. 免推北京大学计算机研究生,北大推免研究生个人陈述
  9. 牛客题霸 [字符串的排列] C++题解/答案
  10. 《科学:无尽的前沿》分享会在京举办,助力中国企业打造“科研的应许之地”
  11. r语言 运算符_R语言运算符
  12. 刘兴亮印象中的李开复
  13. shell编程之【告警系统】
  14. 开展建设医院信息化是医疗行业发展的大势所趋
  15. 关键词排名查询-各大搜索引擎批量实时关键词排名查询
  16. 2019年6月中国编程语言排行榜
  17. 所谓的进步和提升,就是完成认知升级
  18. Hadoop 学习笔记(三)常用命令
  19. 基于android的交流平台,参阅:基于android的大学生信息交流平台的设计与实现
  20. 分析用VBScript编写的网页***

热门文章

  1. 游戏运营数据中DAU的解析
  2. CAEE2023手板模型定制、3D打印技术设备展览会
  3. 三分钟教你如何用Apifox写一个借口文档
  4. python 任务队列 huey_Module-Huey任务队列
  5. 什么是微服务以及微服务的技术点
  6. 色彩的世界之色彩心理
  7. 勤能补拙是良训,一分辛劳一分才【自学自检共勉】第一篇博客~
  8. linux中翻页的快捷键,linux屏幕翻页快捷键 快捷编辑
  9. Python3网络爬虫:漫画下载,动态加载、反爬虫这都不叫事!
  10. T100客户端接口开发实例(T100对接销售易CRM)