Spring 5 core 中的 @NonNull 是个什么鬼?!
说明
在Spring 5
的 spring-core jar包中添加了 jsr-305
相关注解。在 Spring
源码中已经被大量使用。如下图:
JSR-305介绍
诸如 FindBugs、IntelliJ、Checkstyle 和 PMD 这样的静态分析工具在 Java 开发中得到了广泛应用。这些工具都很强大,但是有一些共同的问题它们都很难解决。在 API 的设计中,有一些决策是不言而喻的,比如何时值可以为 null,或者何时数字值不能为负。完备的 API 会将这些设计细节记录在 JavaDoc 之中,但是分析工具却无法发现类似细节,从而有可能将其忽略或是导致错误的检测结果。
为了解决这些问题,有些静态分析工具开发人员试图使用注解来定义相关细节。比如 FindBugs 和 IntelliJ 都定义了自己的注解,以表示方法何时返回 null。不过,这两个工具使用的注解有细微不同,也因此有了标准化的需求。由 FindBugs 创建人 Bill Pugh 带领制定的 JSR-305 标准,试图创建一套标准注解供分析工具使用,同时希望允许开发人员根据自己的需要添加额外的注解。当前提案中包括供判断是否为空、正负号、开发语言和线程等方面的众多注解。
更多jsr-305介绍请查看,JSR-305:供检查软件缺陷用的注解
使用场景
由上文的介绍,我们知晓了 jsr-305
的目标:供检查软件缺陷用。方便静态代码检查工具及时查找出潜在的 bug。所以这些注解特别适合基础组件和工具包,增强 IDE
提示,减少潜在 bug
。
lutool 1.x 中复制了spring 5中的 jsr-305
相关注解到源码中,到 mica - Spring boot 微服务开发核心包 由于依赖的 Spring boot 2.1.x
,则直接使用 spring core
中的注解。
使用
添加包级规则
-
@NonNullFields
表示Field
不为null。
-
@NonNullApi
表示方法参数
和返回值
不为null。
- 对于不想使用包级别不为null,可直接使用
@NonNull
,使用方式同下文@Nullable
。
在包下添加package-info.java
,内容如下:
@NonNullApi @NonNullFields package net.dreamlu.mica.core.utils; import org.springframework.lang.NonNullApi; import org.springframework.lang.NonNullFields;
添加完该注解后编写代码时编辑器会给出提示,如下图:
@Nullable
对于部分可为空的Field
、方法参数
和返回值
需要使用@Nullable
进行标示。
参数可为null
public static boolean isBlank(@Nullable final CharSequence cs) { return !StringUtils.hasText(cs); }
返回值可为null
@Nullable public static String getCookieVal(HttpServletRequest request, String name) { Cookie cookie = getCookie(request, name); return cookie != null ? cookie.getValue() : null; }
属性可为null
@Nullable private String msg;
开源推荐
-
mica
Spring boot 微服务核心组件集:gitee.com/596392912/m… -
Avue
一款基于vue可配置化的神奇框架:gitee.com/smallweigit… -
pig
宇宙最强微服务(架构师必备):gitee.com/log4j/pig -
SpringBlade
完整的线上解决方案(企业开发必备):gitee.com/smallc/Spri… -
IJPay
支付SDK让支付触手可及:gitee.com/javen205/IJ…
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C语言,能开发什么?怎么去学习?
看招聘职位要C语言的比例真不多了,是不是C语言真的过时了? 看看很多招聘网站有关找纯粹的C语言开发的比例真的不是很多,都被Java,php,python等等语言刷屏。这对于初学正在学习C语言的小白简直就是惊天霹雳,学了没人要,学了还有啥意义。如果单从快速找工作的角度考虑这件事的确,这个观点是能站得住脚的。 前几天和一位老码农聊天,开篇就来了这么几句,换开发语言算了,现在的做底层的日子不比以前了,看看那些做App的,做不了几年工资蹭蹭就上去了,我们这熬了这么多年才这么点。 难道C语言真的过时了? 现在先看看C语言到底能做了多少事情,大家经常说的linux操作系统的内核都是C语言写的,对应的很多嵌入式内核驱动也跑不出C语言范畴,包括大家常用的手机,机顶盒,电视机底层硬件驱动基本山都是C语言完成,还有常见基于单片机的程序也主要由C语言完成。大致概括来说嵌入式领域C语言还是无处不在,很多底层的图形库也是基于C语言完成。 当然C语言最牛的地方,几乎现在所有的上层语言的底层语言绝大部分都是C语言大哥做嫁衣给铺垫完成。深刻理解上层语言底层实现,离不开C语言。 linux内核社区火热程度,依然有增无减...
- 下一篇
再议什么是云桌面
目前云桌面已经成为企业、学校IT 基础设施的标配,不再是科技前沿的新宠。高校建设电子教室、政企扩展办公地点… 云桌面都作为基础设备列入了一期采购。随着市场需求的增加,国内云桌面厂商即云桌面产品越来越多、随之也出现越来越多关于云桌面的定义、传输协议与技术名词。每个产品研发团队都有自己对云桌面技术的理解与定义,使之在客户眼前云桌面渐渐成为一种似是而非的概念,没有了一个明确的定义。据说市场上经常出现一种情景:为了抢夺客户厂商之间互怼竞品是“伪云桌面”,只有自己的产品才是真正的云桌面。那么究竟什么是云桌面?它到底有没有一个标准的定义? 在维基百科上我们目前尚找不到“云桌面”这个词条,可能存在争论议也是原因之一。但是关于“云计算” 我可以找到现阶段广为接受的是美国国家标准与技术研究院(NIST)定义: “云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。” 以上对云计算的解释显然太生涩了。NIST 目前也尚未对“云桌面...
相关文章
文章评论
共有0条评论来说两句吧...