使用@NonNull注解遇到的小問題及解決
使用@NonNull注解遇到問題
先簡單介紹一下NotNull和NonNull的差異
- @NotNull 是 JSR303(Bean的校驗框架)的注解,用于運行時檢查一個屬性是否為空,如果為空則不合法。
- @NonNull 是JSR 305(缺陷檢查框架)的注解,是告訴編譯器這個域不可能為空,當(dāng)代碼檢查有空值時會給出一個風(fēng)險警告,目 前這個注解只有IDEA支持。
下面進(jìn)入主題
我在使用@NonNull時遇到的小bug:
@NonNull注解的對象 在其形成無參構(gòu)造函數(shù)時,此注解不會默認(rèn)形成無參構(gòu)造器(問題就出在這兒)
例:
(1)ParameterVO.java中加了NonNull注解
@Data?
public class ParameterVO implements Serializable{
? ? ?@NonNull?
? ? ?private String saasId;
?}編譯后的class文件中(不會生成無參構(gòu)造函數(shù)):
public class ParameterVO implements Serializable{?
? ? @NonNull?
? ? private String saasId;
? ?
? ? @NonNull ??
? ? public String getSaasId() { ??
? ? ? return this.saasId; ??
?} ? ?
? ? .......?
}(2) ParameterVO.java中倘若沒有加上@NonNull注解
@Data?
public class test implements Serializable{ ?
? ? private String saasId;?
}對應(yīng)所編譯后的class文件(可以自動生成無參構(gòu)造函數(shù)):
public class test implements Serializable{ ?
? ? private String saasId; ??
?
? ? public test(){} ?
? ? .......?
}(3)解決方法: 此類情況,在ParameterVO.java中加一個注解@NoArgsConstructor
@Data?
@NoArgsConstructor?
public class ParameterVO implements Serializable{ ?
? ? @NonNull ?
? ? private String saasId;?
}這樣的話,就可以解決掉因為注解@NonNull導(dǎo)致的沒有生成無參構(gòu)造函數(shù)的問題!
Lombok @NonNull注解
普通的 POJO 需要寫或是用IDEA等集成開發(fā)環(huán)境生成大量gettter, setter方法
普通的 POJO 對于 equals 和 hashCode 等方法,也需要自己維護(hù)。特別你寫接口的時候,如果添加了 一個字段忘了維護(hù),可能會導(dǎo)致一些bug
為此Lombok誕生了 它可以簡化你的代碼,讓你的POJO看起來更加地清爽(可以只有類名和字段的聲明,加上少量的注解)
@NonNull注解用來判斷項目中的字段是否為空,為空拋出異常
public class NonNullAnnotation {
? ? @NonNull
? ? @Setter
? ? @Getter
? ? private List<Student> members;
? ? public static void main(String[] args) {
? ? ? ? NonNullAnnotation test = new NonNullAnnotation();
? ? ? ? test.setMembers(null);
? ? ? ? //test.getMembers();
? ? }
}總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring boot 配置freemarker及如何使用freemarker渲染頁面
springboot中自帶的頁面渲染工具為thymeleaf 還有freemarker這兩種模板引擎,本文重點給大家介紹spring boot 配置freemarker及如何使用freemarker渲染頁面,感興趣的朋友一起看看吧2023-10-10
Java如何實現(xiàn)多個線程之間共享數(shù)據(jù)
這篇文章主要介紹了Java如何實現(xiàn)多個線程之間共享數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Java使用connectTo方法提高代碼可續(xù)性詳解
這篇文章主要介紹了Java使用connectTo方法提高代碼可續(xù)性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Mybatis-Plus或PageHelper多表分頁查詢總條數(shù)不對問題的解決方法
PageHelper 這個插件用了很多次了,今天使用的時候才遇到一個問題,這篇文章主要給大家介紹了關(guān)于Mybatis-Plus或PageHelper多表分頁查詢總條數(shù)不對問題的解決方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Java實現(xiàn)一鍵將Word文檔轉(zhuǎn)為PDF
在開發(fā)中,經(jīng)常會碰到需要把 Word 文檔轉(zhuǎn)換成 PDF 格式的需求,Java 有不少好用的庫能實現(xiàn)這個功能,本文為大家介紹了兩個常用的方法,需要的可以了解下2025-02-02

