色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Lombok同時使用@Data和@Builder的一個必須要避開的巨坑

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

問題背景

Lombok @Data和@Builder分別單獨分析用法

解決方法

方法一

方法二

Lombok原理

總結

問題背景

Lombok使? 同時使?@Data和@Builder ,構建無參構造器報錯!編譯不通過。如下圖:

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

Lombok @Data和@Builder分別單獨分析用法

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

例如下?的?個實體類,引?Lombok后,可以?動?成GET/SET?法和?參構造函數。

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

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

那么怎么自動生成有參構造器呢?使用@Builder注解,將會幫助我們?成全屬性的構造?法。

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

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

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

但是如果同時使?@Data和@Builder的話,可以看出盡管?成了GET/SET?法,但是?參構造?法沒有了,這顯然是不能接受的,因為很多框架都會調??參構造去創建對象。

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

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

我們嘗試在Tet1類,?動添加?參構造?法。編譯發現報錯不通過:

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

解決方法

方法一

Lombok同時使?@Data和@Builder的時候,如果要?成?參構造,需要在代碼???動引?注解@Tolerate,讓Lombok在?成類的時候,對指定的構造函數不感知。

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

方法二

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

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

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

Lombok原理

Java的編譯分為以下?個階段:

解析與填充符號表->注解處理->分析與字節碼?成->?成?進制class?件。

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

在編譯期階段,當 Java 源碼被抽象成語法樹 (AST) 之后,Lombok 會根據??的注解處理器動態的修改AST,增加新的代碼 (節點),在這?切執?之后,再通過分析?成了最終的字節碼 (.class) ?件,這就是Lombok 的執?原理。

可以借助注解處理器實現?個簡單的 Setter,我們的實現步驟是:

?定義?個注解標簽接?,并實現?個?定義的注解處理器;

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

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

?先創建?個 MySetter.java ?定義?個注解,代碼如下:

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

再實現?個?定義的注解處理器,代碼如下:

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

測試類如下:

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

2.對注解處理器進?編譯,隨后使?注解處理器對類進?編譯

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

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

然后使?注解處理器對這個Person測試類進?編譯:

這時候再看?成的Person.class,可以發現Setter?法已經?成了:

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

總結

當然盡管測試類已經?成Setter?法,但是因為是在編譯時期?成的,因此我們在開發的時候是沒法直接調?Setter?法的,因此Lombok提供了插件機制,?便我們在開發的時候可以直接去調?Lombok的特性。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2966

    瀏覽量

    104702
  • Data
    +關注

    關注

    0

    文章

    62

    瀏覽量

    38266
  • 編譯
    +關注

    關注

    0

    文章

    657

    瀏覽量

    32852
  • 插件
    +關注

    關注

    0

    文章

    326

    瀏覽量

    22440
  • Builder
    +關注

    關注

    1

    文章

    22

    瀏覽量

    11221

原文標題:Lombok 同時使用 @Data 和 @Builder 的巨坑,千萬別亂用!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何避開智能硬件創業的那些

    `智能硬件是繼智能手機之后的科技概念,通過軟硬件結合的方式,對傳統設備進行改造,進而讓其擁有智能化的功能。智能化之后,硬件具備連接的能力,實現互聯網服務的加載,形成“云+端”的典型架構,具備了
    發表于 03-14 10:13

    請問uboot必須要嗎?

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

    對于28335的SPI的FIFO接收,必須要發送與接收同時開啟嗎?

    對于28335的SPI的FIFO接收,必須要發送與接收同時開啟嗎,因為我只想接收數據,28335不需要發送數據。(外部的芯片數據放在外部芯片的寄存器中,28335通過SPI讀取即可)在TI給出
    發表于 07-20 06:22

    數據包解密必須要配置哪些

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

    stm32hal庫之外部中斷

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

    TPS54310 PWRPAD必須要接地嗎?

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

    智能音箱想要成功 必須要先弄清楚這3問題

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

    單片機程序為什么必須要包含CONST H

    下面就介紹下在我的單片機程序里必須要包含的頭文件----“const.h”,完整內容如下:
    發表于 08-15 17:32 ?2次下載
    單片機程序為什么<b class='flag-5'>必須要</b>包含CONST H

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

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

    Lombok開發插件使用小技巧

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

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

    。您是否正準備擁抱Lombok?還是正準備將如此酷炫的項目推薦給你的團隊?如果您準備那么做,不妨聽聽我在使用Lombok年后的些感受。 我承認,
    的頭像 發表于 10-28 11:29 ?1199次閱讀

    發現Spring事務的bug 你必須要小心了

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

    Lombok的使用

    在平時我們工作的時候,我們經常會使用 toString() 方法來輸出對象的些屬性信息。Lombok 給我們提供了
    的頭像 發表于 09-25 14:03 ?772次閱讀

    Lombok如何派上用場

    Java的 record 關鍵字是Java 14中引入的新的語義特性。record 對于創建小型不可變的對象非常有用。另方面,Lombok
    的頭像 發表于 10-08 15:39 ?297次閱讀

    小程序開發“”多,華為云這款輕量應用服務器輕松避

    地分享和傳播。小程序開發如今已經成為了很多企業和個人的選擇,它具有快速、簡潔、低成本等優勢,但同時也存在許多隱藏的陷阱。 七大,埋雷眾多 第一大坑:設計不合理 不合理的設計會給用戶
    的頭像 發表于 11-23 00:53 ?236次閱讀
    小程序開發“<b class='flag-5'>巨</b><b class='flag-5'>坑</b>”多,華為云這款輕量應用服務器輕松避<b class='flag-5'>坑</b>
    主站蜘蛛池模板: 国产不卡一卡2卡三卡4卡网站| 久久青草在线视频精品| 男人和女人全黄一级毛片| 卫生间被教官做好爽HH视频| 97午夜伦伦电影理论片| 好男人在线视频| 人与禽交3d动漫羞羞动漫| 曰本老头同性xxxxx| 国产欧洲野花A级| 人人干人人插| 100国产精品人妻无码| 国外成人电台| 偷窥 亚洲 色 国产 日韩| a级老头和老太xxxx| 久久免费视频1| 亚洲精品高清中文字幕完整版| 顶级欧美不卡一区二区三区| 男同志在线观看| 中文字幕s级优女区| 精子pk美女| 亚洲黄色在线视频| 国产精品免费小视频| 涩涩999| 成年妇女免费播放| 免费国产成人手机在线观看| 永久adc视频| 精品麻豆一卡2卡三卡4卡乱码 | 乳巨揉みま痴汉电车中文字幕动漫| 18禁无遮遮挡羞漫画免费阅读 | 久久婷婷五月综合色丁香花| 亚洲 天堂 欧美 日韩 国产| 国产99久久久国产精品免费看| 青青久久网| china chinese中国人玩| 免费99精品国产人妻自在线| 中国女人逼| 久久精品99国产精品日本| 亚洲日韩在线天堂一| 含羞草完整视频在线播放免费 | 玉娇龙续集春雪瓶txt免费阅读| 国内一级一级毛片a免费|