最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Lombok同時使?@Data和@Builder踩坑總結(jié)

 更新時間:2022年05月30日 11:32:07   作者:樹洞君?  
這篇文章主要介紹了Lombok同時使?@Data和@Builder踩坑總結(jié),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值需要的小伙伴可以參考一下,希望對你的學習有所幫助

問題背景

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

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

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

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

 編譯后的class為:可以看到不僅幫我們生成了get和set ,同時也有默認的無參構(gòu)造器

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

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

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

編譯后的class: 

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

解決方法

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

Lombok原理

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

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

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

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

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

  • ?定義?個注解標簽接?,并實現(xiàn)?個?定義的注解處理器;
  • 利? tools.jar 的 javac api 處理 AST (抽象語法樹)3. 使??定義的注解處理器編譯代碼。

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

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

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

測試類如下:

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

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

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

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

總結(jié)

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

到此這篇關于Lombok同時使?@Data和@Builder踩坑總結(jié)的文章就介紹到這了,更多相關Lombok @Data和@Builder內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JAVA核心知識之ConcurrentHashMap源碼分析

    JAVA核心知識之ConcurrentHashMap源碼分析

    這篇文章主要介紹了JAVA核心知識之ConcurrentHashMap源碼分析,想了解ConcurrentHashMap的同學一定要看啊
    2021-04-04
  • SpringBoot整合MD5加密完成注冊和登錄方式

    SpringBoot整合MD5加密完成注冊和登錄方式

    MD5(MessageDigestAlgorithm5)是一種常見的哈希算法,用于生成固定長度(128位)的哈希值,主要應用于數(shù)據(jù)完整性校驗和密碼存儲,MD5具有快速計算、不可逆性和抗碰撞性等特點,盡管存在碰撞漏洞,MD5仍廣泛應用于文件下載校驗和數(shù)字簽名等場景
    2024-10-10
  • 詳解如何繼承Mybatis中Mapper.xml文件

    詳解如何繼承Mybatis中Mapper.xml文件

    這篇文章主要為大家介紹了詳解如何繼承Mybatis中Mapper.xml文件,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • 實例解析Java設計模式編程中的適配器模式使用

    實例解析Java設計模式編程中的適配器模式使用

    本篇文章主要通過實例對適配器模式進行了詳解,需要的朋友可以參考下
    2017-04-04
  • SpringSecurity構(gòu)建基于JWT的登錄認證實現(xiàn)

    SpringSecurity構(gòu)建基于JWT的登錄認證實現(xiàn)

    這篇文章主要介紹了SpringSecurity構(gòu)建基于JWT的登錄認證實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • JavaCV實現(xiàn)讀取視頻信息及自動截取封面圖詳解

    JavaCV實現(xiàn)讀取視頻信息及自動截取封面圖詳解

    javacv可以幫助我們在java中很方便的使用OpenCV以及FFmpeg相關的功能接口。本文將利用Javacv實現(xiàn)在視頻網(wǎng)站中常見的讀取視頻信息和自動獲取封面圖的功能,感興趣的可以了解一下
    2022-06-06
  • java instanceof操作符使用及原理解析

    java instanceof操作符使用及原理解析

    這篇文章主要介紹了java instanceof操作符使用及原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Spring中的依賴注入DI詳解

    Spring中的依賴注入DI詳解

    這篇文章主要介紹了Spring中的依賴注入DI詳解,組件之間依賴關系由容器在運行期決定,形象的說,即由容器動態(tài)的將依賴關系注入到組件之中,依賴注入的目的并非為軟件系統(tǒng)帶來更多功能,是為了提升組件重用的頻率,并為系統(tǒng)搭建一個靈活、可擴展的平臺,需要的朋友可以參考下
    2024-01-01
  • SpringBoot使用ApplicationEvent&Listener完成業(yè)務解耦

    SpringBoot使用ApplicationEvent&Listener完成業(yè)務解耦

    這篇文章主要介紹了SpringBoot使用ApplicationEvent&Listener完成業(yè)務解耦示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • mybatis使用foreach遍歷list集合或者array數(shù)組方式

    mybatis使用foreach遍歷list集合或者array數(shù)組方式

    這篇文章主要介紹了mybatis使用foreach遍歷list集合或者array數(shù)組方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論

德惠市| 印江| 梧州市| 灌阳县| 基隆市| 黔西| 新野县| 北安市| 大埔县| 板桥市| 东源县| 红桥区| 宁乡县| 中阳县| 鄂尔多斯市| 商河县| 维西| 鹤庆县| 改则县| 丘北县| 桂林市| 黎平县| 耒阳市| 金昌市| 巴林右旗| 呈贡县| 敦化市| 日土县| 斗六市| 霍山县| 五指山市| 巴林右旗| 灌阳县| 通城县| 吉木萨尔县| 阜康市| 安仁县| 威宁| 历史| 双流县| 太湖县|