說明
在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/pigSpringBlade
完整的線上解決方案(企業開發必備):gitee.com/smallc/Spri…IJPay
支付SDK讓支付觸手可及:gitee.com/javen205/IJ…
關注我們
掃描上面二維碼,更多精彩內容每天推薦!