Lombok使用@Tolerate實(shí)現(xiàn)沖突兼容問(wèn)題
使用@Tolerate實(shí)現(xiàn)沖突兼容
使用Lombok能夠減少程序員的重復(fù)工作提高工作效率,而Lombok的注解基本是基于標(biāo)準(zhǔn)的(如,標(biāo)準(zhǔn)的Builder模式),而實(shí)際開(kāi)發(fā)的時(shí)候有時(shí)候?yàn)榱藢?shí)現(xiàn)某些能力會(huì)對(duì)標(biāo)準(zhǔn)實(shí)現(xiàn)做一些變形,而這個(gè)時(shí)候Lombok的標(biāo)準(zhǔn)實(shí)現(xiàn)就會(huì)無(wú)法滿足需求。
例如,這樣一個(gè)場(chǎng)景
使用@Builder對(duì)一個(gè)DTO實(shí)現(xiàn)一個(gè)構(gòu)造器,但是在做Json反序列化的時(shí)候發(fā)生錯(cuò)誤,
原因就是缺少無(wú)參公共的構(gòu)造函數(shù),
而手動(dòng)寫(xiě)一個(gè)無(wú)參構(gòu)造函數(shù)的時(shí)候編譯錯(cuò)誤,就是和@Builder沖突,雖然標(biāo)準(zhǔn)的@Builder沒(méi)法是需要私有化構(gòu)造函數(shù)的,但是在某些場(chǎng)景下我們需要對(duì)這種標(biāo)準(zhǔn)變形,這個(gè)時(shí)候Lombok提供了@Tolerate實(shí)現(xiàn)對(duì)沖突的兼容。
/** * <p> * 包括能力、知識(shí)點(diǎn)等 * </p> * * @author hlong * @since 2020-09-10 */ @Data @Entity @Table(name = "que_attr") @Builder @ApiModel(value="QueAttr對(duì)象", description="包括能力、知識(shí)點(diǎn)等") public class QueAttr implements Serializable { @Tolerate QueAttr() {} private static final long serialVersionUID = 1L; @ApiModelProperty(value = "屬性編號(hào),系統(tǒng)自動(dò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 = "簡(jiǎn)稱") @Column(name = "name_short") private String nameShort; @ApiModelProperty(value = "上級(jí)節(jié)點(diǎn)") @Column(name = "attr_up") private Long attrUp; @ApiModelProperty(value = "級(jí)別:第1級(jí)為0") @Column(name = "lev") private Integer lev; @ApiModelProperty(value = "從小到大,從1開(kāi)始") @Column(name = "sort_no") private Integer sortNo; @ApiModelProperty(value = "(枚舉)屬性分類信息 見(jiàn)字典表,這里主要是能力和知識(shí)點(diǎn)") @Column(name = "attr_type") private Long attrType; @ApiModelProperty(value = "機(jī)構(gòu)編號(hào):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 = "更新時(shí)間") @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 = "屬性的父級(jí)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 = "年級(jí)的code-學(xué)院code") @Column(name = "grade_uuid") private String gradeUuid; }
Lombok實(shí)驗(yàn)性注解之@Tolerate
注解介紹
實(shí)現(xiàn)對(duì)沖突的兼容,官方解釋:使任何方法或者構(gòu)造函數(shù)讓 lombok 假裝它不存在,作用于方法上,沒(méi)什么大用,可以配合 @Builder 使用
使用場(chǎng)景
使用 Lombok 能夠減少程序員的重復(fù)工作提高工作效率,而 lombok 的注解基本是基于標(biāo)準(zhǔn)的(如,標(biāo)準(zhǔn)的 Builder 模式),而實(shí)際開(kāi)發(fā)的時(shí)候有時(shí)候?yàn)榱藢?shí)現(xiàn)某些能力會(huì)對(duì)標(biāo)準(zhǔn)實(shí)現(xiàn)做一些變形,而這個(gè)時(shí)候 lombok 的標(biāo)準(zhǔn)實(shí)現(xiàn)就會(huì)無(wú)法滿足需求
使用 @Builder 對(duì)一個(gè) DTO 實(shí)現(xiàn)一個(gè)構(gòu)造器,但是在做 Json 反序列化的時(shí)候發(fā)生錯(cuò)誤,原因就是缺少無(wú)參公共的構(gòu)造函數(shù),而手動(dòng)寫(xiě)一個(gè)無(wú)參構(gòu)造函數(shù)的時(shí)候編譯錯(cuò)誤,就是和 @Builder 沖突,雖然標(biāo)準(zhǔn)的 @Builder 沒(méi)法是需要私有化構(gòu)造函數(shù)的,但是在某些場(chǎng)景下我們需要對(duì)這種標(biāo)準(zhǔn)變形,這個(gè)時(shí)候 lombok 提供了 @Tolerate 實(shí)現(xiàn)對(duì)沖突的兼容
實(shí)戰(zhàn)演練
@Builder public class 程熙媛 { ?? ?@Tolerate ?? ?public 程熙媛() {} }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中的Sentinel持久化規(guī)則啟動(dòng)
這篇文章主要介紹了Java中的Sentinel持久化規(guī)則啟動(dòng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08IDEA 中使用 Big Data Tools 連接大數(shù)據(jù)組件
本文主要介紹了IDEA 中使用 Big Data Tools 連接大數(shù)據(jù)組件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05Spring boot整合mybatis實(shí)現(xiàn)過(guò)程圖解
這篇文章主要介紹了Spring boot整合mybatis實(shí)現(xiàn)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Java實(shí)現(xiàn)短信發(fā)送驗(yàn)證碼功能
這篇文章主要介紹了Java實(shí)現(xiàn)短信發(fā)送驗(yàn)證碼功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2018-10-10Java程序部署到服務(wù)器上,接口請(qǐng)求下載文件失敗/文件為空/文件名不對(duì)的問(wèn)題
這篇文章主要介紹了Java程序部署到服務(wù)器上,接口請(qǐng)求下載文件失敗/文件為空/文件名不對(duì),本文給大家分享錯(cuò)誤原因及解決方法,需要的朋友可以參考下2020-07-07springboot 啟動(dòng)如何排除某些bean的注入
這篇文章主要介紹了springboot 啟動(dòng)如何排除某些bean的注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08