Spring 5 core 中的 @NonNull 是個什麼鬼?!

說明

Spring 5的 spring-core jar包中添加了 jsr-305 相關注解。在 Spring 源碼中已經被大量使用。以下圖:vue

spring-jsr305

JSR-305介紹

諸如 FindBugs、IntelliJ、Checkstyle 和 PMD 這樣的靜態分析工具在 Java 開發中獲得了普遍應用。這些工具都很強大,可是有一些共同的問題它們都很難解決。在 API 的設計中,有一些決策是不言而喻的,好比什麼時候值能夠爲 null,或者什麼時候數字值不能爲負。完備的 API 會將這些設計細節記錄在 JavaDoc 之中,可是分析工具卻沒法發現相似細節,從而有可能將其忽略或是致使錯誤的檢測結果。java

爲了解決這些問題,有些靜態分析工具開發人員試圖使用註解來定義相關細節。好比 FindBugs 和 IntelliJ 都定義了本身的註解,以表示方法什麼時候返回 null。不過,這兩個工具使用的註解有細微不一樣,也所以有了標準化的需求。由 FindBugs 建立人 Bill Pugh 帶領制定的 JSR-305 標準,試圖建立一套標準註解供分析工具使用,同時但願容許開發人員根據本身的須要添加額外的註解。當前提案中包括供判斷是否爲空、正負號、開發語言和線程等方面的衆多註解。git

更多jsr-305介紹請查看,JSR-305:供檢查軟件缺陷用的註解spring

使用場景

由上文的介紹,咱們知曉了 jsr-305 的目標:供檢查軟件缺陷用。方便靜態代碼檢查工具及時查找出潛在的 bug。因此這些註解特別適合基礎組件和工具包,加強 IDE 提示,減小潛在 bugcookie

lutool 1.x 中複製了spring 5中的 jsr-305 相關注解到源碼中,到 mica - Spring boot 微服務開發核心包 因爲依賴的 Spring boot 2.1.x,則直接使用 spring core 中的註解。架構

使用

添加包級規則

  1. @NonNullFields表示Field不爲null。框架

  2. @NonNullApi表示方法參數返回值不爲null。編輯器

  3. 對於不想使用包級別不爲null,可直接使用@NonNull,使用方式同下文@Nullableide

在包下添加package-info.java,內容以下。微服務

@NonNullApi
@NonNullFields
package net.dreamlu.mica.core.utils;

import org.springframework.lang.NonNullApi;
import org.springframework.lang.NonNullFields;
複製代碼

添加完該註解後編寫代碼時編輯器會給出提示,以下圖:

idea方法提示1

idea方法提示2

@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;
複製代碼

開源推薦

關注咱們

如夢技術-公衆號.jpg

掃描上面二維碼,更多精彩內容天天推薦!

相關文章
相關標籤/搜索