博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 5 core 中的 @NonNull 是个什么鬼?!
阅读量:6155 次
发布时间:2019-06-21

本文共 1662 字,大约阅读时间需要 5 分钟。

hot3.png

说明

Spring 5的 spring-core jar包中添加了 jsr-305 相关注解。在 Spring 源码中已经被大量使用。如下图: 001.png

JSR-305介绍

诸如 FindBugs、IntelliJ、Checkstyle 和 PMD 这样的静态分析工具在 Java 开发中得到了广泛应用。这些工具都很强大,但是有一些共同的问题它们都很难解决。在 API 的设计中,有一些决策是不言而喻的,比如何时值可以为 null,或者何时数字值不能为负。完备的 API 会将这些设计细节记录在 JavaDoc 之中,但是分析工具却无法发现类似细节,从而有可能将其忽略或是导致错误的检测结果。

为了解决这些问题,有些静态分析工具开发人员试图使用注解来定义相关细节。比如 FindBugs 和 IntelliJ 都定义了自己的注解,以表示方法何时返回 null。不过,这两个工具使用的注解有细微不同,也因此有了标准化的需求。由 FindBugs 创建人 Bill Pugh 带领制定的 JSR-305 标准,试图创建一套标准注解供分析工具使用,同时希望允许开发人员根据自己的需要添加额外的注解。当前提案中包括供判断是否为空、正负号、开发语言和线程等方面的众多注解。

更多jsr-305介绍请查看,

使用场景

由上文的介绍,我们知晓了 jsr-305 的目标:供检查软件缺陷用。方便静态代码检查工具及时查找出潜在的 bug。所以这些注解特别适合基础组件和工具包,增强 IDE 提示,减少潜在 bug。<br />lutool 1.x 中复制了spring 5中的 jsr-305 相关注解到源码中,到 由于依赖的 Spring boot 2.1.x,则直接使用 spring core 中的注解。

使用

添加包级规则

  1. @NonNullFields表示Field不为null。
  2. @NonNullApi表示方法参数返回值不为null。
  3. 对于不想使用包级别不为null,可直接使用@NonNull,使用方式同下文@Nullable

在包下添加package-info.java,内容如下:

@NonNullApi@NonNullFieldspackage net.dreamlu.mica.core.utils;import org.springframework.lang.NonNullApi;import org.springframework.lang.NonNullFields;

添加完该注解后编写代码时编辑器会给出提示,如下图: 002.png

003.png

@Nullable

对于部分可为空的Field方法参数返回值需要使用@Nullable进行标示。

参数可为null

public static boolean isBlank(@Nullable final CharSequence cs) {    return !StringUtils.hasText(cs);}

返回值可为null

@Nullablepublic static String getCookieVal(HttpServletRequest request, String name) {    Cookie cookie = getCookie(request, name);    return cookie != null ? cookie.getValue() : null;}

属性可为null

@Nullableprivate String msg;

开源推荐

  • mica Spring boot 微服务核心组件集:
  • Avue 一款基于vue可配置化的神奇框架:
  • pig 宇宙最强微服务(架构师必备):
  • SpringBlade 完整的线上解决方案(企业开发必备):
  • IJPay 支付SDK让支付触手可及:

关注我们

如梦技术-公众号.jpg

扫描上面二维码,更多精彩内容每天推荐!

转载于:https://my.oschina.net/qq596392912/blog/3036656

你可能感兴趣的文章
asp.net开发mysql注意事项
查看>>
(转)Cortex-M3 (NXP LPC1788)之EEPROM存储器
查看>>
ubuntu set defult jdk
查看>>
[译]ECMAScript.next:TC39 2012年9月会议总结
查看>>
【Xcode】编辑与调试
查看>>
用tar和split将文件分包压缩
查看>>
[BTS] Could not find stored procedure 'mp_sap_check_tid'
查看>>
PLSQL DBMS_DDL.ALTER_COMPILE
查看>>
Activity生命周期
查看>>
高仿UC浏览器弹出菜单效果
查看>>
Ubuntu忘记密码,进不了系统的解决方法
查看>>
[原创]白盒测试技术思维导图
查看>>
<<Information Store and Management>> 读书笔记 之八
查看>>
Windows 8 开发之设置合约
查看>>
闲说HeartBeat心跳包和TCP协议的KeepAlive机制
查看>>
MoSQL
查看>>
Hibernate多对一外键单向关联(Annotation配置)
查看>>
《CLR via C#》读书笔记 之 方法
查看>>
设计模式:组合模式(Composite Pattern)
查看>>
ContentValues 和HashTable区别
查看>>