在Spring 5
的 spring-core jar包中添加了 jsr-305
相關注解。在 Spring
源碼中已經被大量使用。以下圖:java
諸如 FindBugs、IntelliJ、Checkstyle 和 PMD 這樣的靜態分析工具在 Java 開發中獲得了普遍應用。這些工具都很強大,可是有一些共同的問題它們都很難解決。在 API 的設計中,有一些決策是不言而喻的,好比什麼時候值能夠爲 null,或者什麼時候數字值不能爲負。完備的 API 會將這些設計細節記錄在 JavaDoc 之中,可是分析工具卻沒法發現相似細節,從而有可能將其忽略或是致使錯誤的檢測結果。spring
爲了解決這些問題,有些靜態分析工具開發人員試圖使用註解來定義相關細節。好比 FindBugs 和 IntelliJ 都定義了本身的註解,以表示方法什麼時候返回 null。不過,這兩個工具使用的註解有細微不一樣,也所以有了標準化的需求。由 FindBugs 建立人 Bill Pugh 帶領制定的 JSR-305 標準,試圖建立一套標準註解供分析工具使用,同時但願容許開發人員根據本身的須要添加額外的註解。當前提案中包括供判斷是否爲空、正負號、開發語言和線程等方面的衆多註解。cookie
更多jsr-305介紹請查看,JSR-305:供檢查軟件缺陷用的註解[1]編輯器
由上文的介紹,咱們知曉了 jsr-305
的目標:供檢查軟件缺陷用。方便靜態代碼檢查工具及時查找出潛在的 bug。因此這些註解特別適合基礎組件和工具包,加強 IDE
提示,減小潛在 bug
。
lutool 1.x 中複製了spring 5中的 jsr-305
相關注解到源碼中,到 mica - Spring boot 微服務開發核心包[2] 因爲依賴的 Spring boot 2.1.x
,則直接使用 spring core
中的註解。ide
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;
添加完該註解後編寫代碼時編輯器會給出提示,以下圖:spa
@Nullable
對於部分可爲空的Field
、方法參數
和返回值
須要使用@Nullable
進行標示。線程
public static boolean isBlank(@Nullable final CharSequence cs) { return !StringUtils.hasText(cs);}
@Nullablepublic static String getCookieVal(HttpServletRequest request, String name) { Cookie cookie = getCookie(request, name); return cookie != null ? cookie.getValue() : null;}
@Nullableprivate String msg;