在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Lombok同時(shí)使用@Data和@Builder的一個(gè)必須要避開的巨坑

jf_ro2CN3Fa ? 來源:樹洞君 ? 作者:樹洞君 ? 2022-10-11 18:14 ? 次閱讀

問題背景

Lombok @Data和@Builder分別單獨(dú)分析用法

解決方法

方法一

方法二

Lombok原理

總結(jié)

問題背景

Lombok使? 同時(shí)使?@Data和@Builder ,構(gòu)建無參構(gòu)造器報(bào)錯(cuò)!編譯不通過。如下圖:

30fcccac-47b9-11ed-a3b6-dac502259ad0.jpg

Lombok @Data和@Builder分別單獨(dú)分析用法

Lombok使?@Data可以?成?參構(gòu)造和類??所有屬性的getter/setter?法。可以簡化我們代碼的開發(fā)。(需要安裝Lombok插件和引?Lombok依賴)。

例如下?的?個(gè)實(shí)體類,引?Lombok后,可以?動(dòng)?成GET/SET?法和?參構(gòu)造函數(shù)。

310e6890-47b9-11ed-a3b6-dac502259ad0.jpg編譯后的class為:可以看到不僅幫我們生成了get和set ,同時(shí)也有默認(rèn)的無參構(gòu)造器

3125c396-47b9-11ed-a3b6-dac502259ad0.jpg

那么怎么自動(dòng)生成有參構(gòu)造器呢?使用@Builder注解,將會(huì)幫助我們?成全屬性的構(gòu)造?法。

314a71aa-47b9-11ed-a3b6-dac502259ad0.jpg

編譯后的class為:可以看到 已經(jīng)幫我們構(gòu)建好了全屬性的構(gòu)造方法,但是如果值只引用@Builder注解是無法生成get和set的。

316222aa-47b9-11ed-a3b6-dac502259ad0.jpg

但是如果同時(shí)使?@Data和@Builder的話,可以看出盡管?成了GET/SET?法,但是?參構(gòu)造?法沒有了,這顯然是不能接受的,因?yàn)楹芏嗫蚣芏紩?huì)調(diào)??參構(gòu)造去創(chuàng)建對(duì)象。

3170a69a-47b9-11ed-a3b6-dac502259ad0.jpg

編譯后的class:318e9f38-47b9-11ed-a3b6-dac502259ad0.jpg

我們嘗試在Tet1類,?動(dòng)添加?參構(gòu)造?法。編譯發(fā)現(xiàn)報(bào)錯(cuò)不通過:

30fcccac-47b9-11ed-a3b6-dac502259ad0.jpg

解決方法

方法一

Lombok同時(shí)使?@Data和@Builder的時(shí)候,如果要?成?參構(gòu)造,需要在代碼???動(dòng)引?注解@Tolerate,讓Lombok在?成類的時(shí)候,對(duì)指定的構(gòu)造函數(shù)不感知。

31d635f0-47b9-11ed-a3b6-dac502259ad0.jpg

方法二

直接使用無參構(gòu)造器+有參構(gòu)造器的方式,@RequiredArgsConstructor 來構(gòu)建有參,@NoArgsConstructor來構(gòu)建無參構(gòu)造器,如圖所示:

31e61114-47b9-11ed-a3b6-dac502259ad0.jpg編譯后效果:

320202a2-47b9-11ed-a3b6-dac502259ad0.jpg

Lombok原理

Java的編譯分為以下?個(gè)階段:

解析與填充符號(hào)表->注解處理->分析與字節(jié)碼?成->?成?進(jìn)制class?件。

Lombok 使?的是 JDK 6 實(shí)現(xiàn)的 JSR 269: Pluggable Annotation Processing API (編譯期的注解處理器),它是在編譯期時(shí)把 Lombok 的注解代碼,轉(zhuǎn)換為常規(guī)的 Java ?法?實(shí)現(xiàn)注?。

在編譯期階段,當(dāng) Java 源碼被抽象成語法樹 (AST) 之后,Lombok 會(huì)根據(jù)??的注解處理器動(dòng)態(tài)的修改AST,增加新的代碼 (節(jié)點(diǎn)),在這?切執(zhí)?之后,再通過分析?成了最終的字節(jié)碼 (.class) ?件,這就是Lombok 的執(zhí)?原理。

可以借助注解處理器實(shí)現(xiàn)?個(gè)簡單的 Setter,我們的實(shí)現(xiàn)步驟是:

?定義?個(gè)注解標(biāo)簽接?,并實(shí)現(xiàn)?個(gè)?定義的注解處理器;

利? tools.jar 的 javac api 處理 AST (抽象語法樹)3. 使??定義的注解處理器編譯代碼。

1.定義?定義注解和注解處理器

?先創(chuàng)建?個(gè) MySetter.java ?定義?個(gè)注解,代碼如下:

322d8bca-47b9-11ed-a3b6-dac502259ad0.jpg

再實(shí)現(xiàn)?個(gè)?定義的注解處理器,代碼如下:

323c9552-47b9-11ed-a3b6-dac502259ad0.jpg32574b7c-47b9-11ed-a3b6-dac502259ad0.jpg3295f1ce-47b9-11ed-a3b6-dac502259ad0.jpg

測(cè)試類如下:

32b791d0-47b9-11ed-a3b6-dac502259ad0.jpg

2.對(duì)注解處理器進(jìn)?編譯,隨后使?注解處理器對(duì)類進(jìn)?編譯

?先需要先對(duì)注解處理器進(jìn)?編譯(javac -cp ?于引?第三?jar包進(jìn)?編譯)

32cef5fa-47b9-11ed-a3b6-dac502259ad0.jpg

然后使?注解處理器對(duì)這個(gè)Person測(cè)試類進(jìn)?編譯:

這時(shí)候再看?成的Person.class,可以發(fā)現(xiàn)Setter?法已經(jīng)?成了:

32e5ffca-47b9-11ed-a3b6-dac502259ad0.jpg32f6a2f8-47b9-11ed-a3b6-dac502259ad0.jpg

總結(jié)

當(dāng)然盡管測(cè)試類已經(jīng)?成Setter?法,但是因?yàn)槭窃诰幾g時(shí)期?成的,因此我們?cè)陂_發(fā)的時(shí)候是沒法直接調(diào)?Setter?法的,因此Lombok提供了插件機(jī)制,?便我們?cè)陂_發(fā)的時(shí)候可以直接去調(diào)?Lombok的特性。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2967

    瀏覽量

    104751
  • Data
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    38272
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    657

    瀏覽量

    32871
  • 插件
    +關(guān)注

    關(guān)注

    0

    文章

    327

    瀏覽量

    22442
  • Builder
    +關(guān)注

    關(guān)注

    1

    文章

    22

    瀏覽量

    11228

原文標(biāo)題:Lombok 同時(shí)使用 @Data 和 @Builder 的巨坑,千萬別亂用!

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何避開智能硬件創(chuàng)業(yè)的那些

    `智能硬件是繼智能手機(jī)之后的個(gè)科技概念,通過軟硬件結(jié)合的方式,對(duì)傳統(tǒng)設(shè)備進(jìn)行改造,進(jìn)而讓其擁有智能化的功能。智能化之后,硬件具備連接的能力,實(shí)現(xiàn)互聯(lián)網(wǎng)服務(wù)的加載,形成“云+端”的典型架構(gòu),具備了
    發(fā)表于 03-14 10:13

    請(qǐng)問uboot必須要嗎?

    uboot是必須要的嗎?
    發(fā)表于 08-23 05:45

    對(duì)于28335的SPI的FIFO接收,必須要發(fā)送與接收同時(shí)開啟嗎?

    對(duì)于28335的SPI的FIFO接收,必須要發(fā)送與接收同時(shí)開啟嗎,因?yàn)槲抑幌虢邮諗?shù)據(jù),28335不需要發(fā)送數(shù)據(jù)。(外部的芯片數(shù)據(jù)放在外部芯片的寄存器中,28335通過SPI讀取即可)在TI給出
    發(fā)表于 07-20 06:22

    數(shù)據(jù)包解密必須要配置哪些

    1、數(shù)據(jù)包解密必須要配置 Netkey,Appkey,Devkey, IV Index的,可以找下配置接口。2、廣播包需要 37,38, 39 三通道同時(shí)抓才行,般使用的是專門的儀
    發(fā)表于 07-22 08:04

    stm32hal庫之外部中斷

    stm32hal庫之外部中斷,如果使用按鍵外部中斷會(huì)導(dǎo)致頻繁觸發(fā)中斷,從而不能退出中斷,導(dǎo)致卡死void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin
    發(fā)表于 08-13 08:17

    TPS54310 PWRPAD必須要接地嗎?

    TPS54310 PWRPAD必須要接地嗎?
    發(fā)表于 12-14 11:08

    智能音箱想要成功 必須要先弄清楚這3個(gè)問題

    2018年6月14日,在億歐“智能+新商業(yè)峰會(huì)”同期舉辦的“AI消費(fèi)產(chǎn)品峰會(huì)”上,我們將專門設(shè)立智能音箱相關(guān)圓桌論壇,對(duì)這問題進(jìn)行深刻的探討。而今天,就先來聊聊智能音箱想要成功,必須要想清楚的3個(gè)問題。
    發(fā)表于 12-18 16:59 ?2259次閱讀
    智能音箱想要成功 <b class='flag-5'>必須要</b>先弄清楚這3<b class='flag-5'>個(gè)</b>問題

    單片機(jī)程序?yàn)槭裁?b class='flag-5'>必須要包含CONST H

    下面就介紹下在我的單片機(jī)程序里必須要包含的個(gè)頭文件----“const.h”,完整內(nèi)容如下:
    發(fā)表于 08-15 17:32 ?2次下載
    單片機(jī)程序?yàn)槭裁?b class='flag-5'>必須要</b>包含CONST H

    三極管,三個(gè)必須要掌握的“判別方法”資料下載

    電子發(fā)燒友網(wǎng)為你提供三極管,三個(gè)必須要掌握的“判別方法”資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-03 08:42 ?17次下載
    三極管,三<b class='flag-5'>個(gè)</b><b class='flag-5'>必須要</b>掌握的“判別方法”資料下載

    Lombok開發(fā)插件使用小技巧

    0x01:Lombok簡介 Lombok款 Java開發(fā)插件,使得 Java 開發(fā)者可以通過其定義的些注解來消除業(yè)務(wù)工程中冗長和繁瑣的代碼,尤其對(duì)于簡單的 Java 模型對(duì)象(
    的頭像 發(fā)表于 06-12 18:07 ?1780次閱讀

    重演自己如何掉入Lombok的戲法陷阱

    。您是否正準(zhǔn)備擁抱Lombok?還是正準(zhǔn)備將如此酷炫的項(xiàng)目推薦給你的團(tuán)隊(duì)?如果您準(zhǔn)備那么做,不妨聽聽我在使用Lombok年后的些感受。 我承認(rèn),
    的頭像 發(fā)表于 10-28 11:29 ?1201次閱讀

    發(fā)現(xiàn)個(gè)Spring事務(wù)的bug 你必須要小心了

    不正確 9.多線程調(diào)用 10.嵌套事務(wù)多回滾了 對(duì)于從事java開發(fā)工作的同學(xué)來說,spring的事務(wù)肯定再熟悉不過了。在某些業(yè)務(wù)場(chǎng)景下,如果同時(shí)有多張表的寫入操作,為了保證操作的原子性(要么同時(shí)成功,要么同時(shí)失敗)避免數(shù)據(jù)不
    的頭像 發(fā)表于 10-11 18:17 ?857次閱讀

    Lombok的使用

    在平時(shí)我們工作的時(shí)候,我們經(jīng)常會(huì)使用 toString() 方法來輸出個(gè)對(duì)象的些屬性信息。Lombok 給我們提供了
    的頭像 發(fā)表于 09-25 14:03 ?783次閱讀

    Lombok如何派上用場(chǎng)

    Java的 record 關(guān)鍵字是Java 14中引入的個(gè)新的語義特性。record 對(duì)于創(chuàng)建小型不可變的對(duì)象非常有用。另方面,Lombok
    的頭像 發(fā)表于 10-08 15:39 ?302次閱讀

    小程序開發(fā)“”多,華為云這款輕量應(yīng)用服務(wù)器輕松避

    地分享和傳播。小程序開發(fā)如今已經(jīng)成為了很多企業(yè)和個(gè)人的選擇,它具有快速、簡潔、低成本等優(yōu)勢(shì),但同時(shí)也存在許多隱藏的陷阱。 七大,埋雷眾多 第一大坑:設(shè)計(jì)不合理 不合理的設(shè)計(jì)會(huì)給用戶
    的頭像 發(fā)表于 11-23 00:53 ?237次閱讀
    小程序開發(fā)“<b class='flag-5'>巨</b><b class='flag-5'>坑</b>”多,華為云這款輕量應(yīng)用服務(wù)器輕松避<b class='flag-5'>坑</b>
    主站蜘蛛池模板: 中文字幕天天干| 天天综合天天| 久久天天躁夜夜躁狠狠85台湾| h网站在线观看| 婷婷涩五月| 国产美女精品三级在线观看 | 美国bj69| 婷婷激情亚洲| 操美女网址| 1024久久| 色在线网站| 一级视频免费观看| 国产黄在线观看| 色香蕉视频| 午夜资源| 国产片翁熄系列乱在线视频| 久久精品波多野结衣| 在线天堂bt种子| 国产在线视频资源| www.色综合| 色小视频| 午夜影网| 国产性做久久久久久| 黄色大片aa| 511韩国理论片在线观看| 五月婷婷综合激情| 三级四级特黄在线观看| 国产一区二区三区影院 | 日韩乱轮| www黄色大片| 在线观看一区二区三区视频| 欧美日韩看片| 国产在线视频欧美亚综合| 五月综合色婷婷影院在线观看| 俺去操| 性网站视频| 黄色在线免费看| 国产黄色网| 尻老逼| 男啪女视频免费观看网站| 欧美一级日韩一级亚洲一级|