Lombok使用@Tolerate實(shí)現(xiàn)沖突兼容問題
使用@Tolerate實(shí)現(xiàn)沖突兼容
使用Lombok能夠減少程序員的重復(fù)工作提高工作效率,而Lombok的注解基本是基于標(biāo)準(zhǔn)的(如,標(biāo)準(zhǔn)的Builder模式),而實(shí)際開發(fā)的時候有時候?yàn)榱藢?shí)現(xiàn)某些能力會對標(biāo)準(zhǔn)實(shí)現(xiàn)做一些變形,而這個時候Lombok的標(biāo)準(zhǔn)實(shí)現(xiàn)就會無法滿足需求。
例如,這樣一個場景
使用@Builder對一個DTO實(shí)現(xiàn)一個構(gòu)造器,但是在做Json反序列化的時候發(fā)生錯誤,
原因就是缺少無參公共的構(gòu)造函數(shù),
而手動寫一個無參構(gòu)造函數(shù)的時候編譯錯誤,就是和@Builder沖突,雖然標(biāo)準(zhǔn)的@Builder沒法是需要私有化構(gòu)造函數(shù)的,但是在某些場景下我們需要對這種標(biāo)準(zhǔn)變形,這個時候Lombok提供了@Tolerate實(shí)現(xiàn)對沖突的兼容。
/**
* <p>
* 包括能力、知識點(diǎn)等
* </p>
*
* @author hlong
* @since 2020-09-10
*/
@Data
@Entity
@Table(name = "que_attr")
@Builder
@ApiModel(value="QueAttr對象", description="包括能力、知識點(diǎn)等")
public class QueAttr implements Serializable {
@Tolerate
QueAttr() {}
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "屬性編號,系統(tǒng)自動產(chǎn)生")
@Id
@Column(name = "attr_id")
private Long attrId;
@ApiModelProperty(value = "屬性編碼")
@Column(name = "attr_code")
private String attrCode;
@ApiModelProperty(value = "屬性名稱")
@Column(name = "name")
private String name;
@ApiModelProperty(value = "屬性名稱中文")
@Column(name = "name_cn")
private String nameCn;
@ApiModelProperty(value = "簡稱")
@Column(name = "name_short")
private String nameShort;
@ApiModelProperty(value = "上級節(jié)點(diǎn)")
@Column(name = "attr_up")
private Long attrUp;
@ApiModelProperty(value = "級別:第1級為0")
@Column(name = "lev")
private Integer lev;
@ApiModelProperty(value = "從小到大,從1開始")
@Column(name = "sort_no")
private Integer sortNo;
@ApiModelProperty(value = "(枚舉)屬性分類信息 見字典表,這里主要是能力和知識點(diǎn)")
@Column(name = "attr_type")
private Long attrType;
@ApiModelProperty(value = "機(jī)構(gòu)編號:0公司")
@Column(name = "org_id")
private Long orgId;
@Column(name = "subject")
private Long subject;
@Column(name = "key_stage")
private Long keyStage;
@Column(name = "grade")
private Long grade;
@Column(name = "term")
private Integer term;
@ApiModelProperty(value = "添加人")
@Column(name = "user_create")
private Long userCreate;
@ApiModelProperty(value = "-1刪除 0草稿 1有效")
@Column(name = "status")
private Integer status;
@Column(name = "sys_code")
private Long sysCode;
@ApiModelProperty(value = "更新時間")
@Column(name = "time_update")
private Timestamp timeUpdate;
@ApiModelProperty(value = "備注")
@Column(name = "remark")
private String remark;
@ApiModelProperty(value = "屬性的uuid")
@Column(name = "attr_uuid")
private String attrUuid;
@ApiModelProperty(value = "屬性的父級uuid")
@Column(name = "attr_up_uuid")
private String attrUpUuid;
@ApiModelProperty(value = "教材版本uuid")
@Column(name = "book_code")
private String bookCode;
@ApiModelProperty(value = "教材版本名稱")
@Column(name = "book_name")
private String bookName;
@ApiModelProperty(value = "年級的code-學(xué)院code")
@Column(name = "grade_uuid")
private String gradeUuid;
}
Lombok實(shí)驗(yàn)性注解之@Tolerate
注解介紹
實(shí)現(xiàn)對沖突的兼容,官方解釋:使任何方法或者構(gòu)造函數(shù)讓 lombok 假裝它不存在,作用于方法上,沒什么大用,可以配合 @Builder 使用
使用場景
使用 Lombok 能夠減少程序員的重復(fù)工作提高工作效率,而 lombok 的注解基本是基于標(biāo)準(zhǔn)的(如,標(biāo)準(zhǔn)的 Builder 模式),而實(shí)際開發(fā)的時候有時候?yàn)榱藢?shí)現(xiàn)某些能力會對標(biāo)準(zhǔn)實(shí)現(xiàn)做一些變形,而這個時候 lombok 的標(biāo)準(zhǔn)實(shí)現(xiàn)就會無法滿足需求
使用 @Builder 對一個 DTO 實(shí)現(xiàn)一個構(gòu)造器,但是在做 Json 反序列化的時候發(fā)生錯誤,原因就是缺少無參公共的構(gòu)造函數(shù),而手動寫一個無參構(gòu)造函數(shù)的時候編譯錯誤,就是和 @Builder 沖突,雖然標(biāo)準(zhǔn)的 @Builder 沒法是需要私有化構(gòu)造函數(shù)的,但是在某些場景下我們需要對這種標(biāo)準(zhǔn)變形,這個時候 lombok 提供了 @Tolerate 實(shí)現(xiàn)對沖突的兼容
實(shí)戰(zhàn)演練
@Builder
public class 程熙媛 {
?? ?@Tolerate
?? ?public 程熙媛() {}
}以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談java中集合的由來,以及集合和數(shù)組的區(qū)別詳解
下面小編就為大家?guī)硪黄獪\談java中集合的由來,以及集合和數(shù)組的區(qū)別詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10
ElasticSearch學(xué)習(xí)之文檔API相關(guān)操作
這篇文章主要為大家介紹了ElasticSearch學(xué)習(xí)之文檔API相關(guān)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
SpringBoot項(xiàng)目中如何實(shí)現(xiàn)MySQL讀寫分離詳解
在高并發(fā)下需要對應(yīng)用進(jìn)行讀寫分離,配置多數(shù)據(jù)源,即寫操作走主庫,讀操作則走從庫,主從數(shù)據(jù)庫負(fù)責(zé)各自的讀和寫,緩解了鎖的爭用,提高了讀取性能,這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目中如何實(shí)現(xiàn)MySQL讀寫分離的相關(guān)資料,需要的朋友可以參考下2022-07-07
java字符串相加時的內(nèi)存表現(xiàn)和原理分析
這篇文章主要介紹了java字符串相加時的內(nèi)存表現(xiàn)和原理分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringBoot中@ConditionalOnProperty的使用及作用詳解
這篇文章主要介紹了SpringBoot中@ConditionalOnProperty的使用及作用詳解,@ConditionalOnProperty通過讀取本地配置文件中的值來判斷 某些 Bean 或者 配置類 是否加入spring 中,需要的朋友可以參考下2024-01-01

