日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lombok 子类如何使用 @Builder

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lombok 子类如何使用 @Builder 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
點擊上方?好好學java?,選擇?星標?公眾號重磅資訊、干貨,第一時間送達 今日推薦:分享一套基于SpringBoot和Vue的企業級中后臺開源項目,這個項目有點哇塞!個人原創100W+訪問量博客:點擊前往,查看更多

作者:jitwxs

https://jitwxs.cn/54621f54.html

一、前言

業務開發中,子類父類還算是經常用到,Lombok 的 @builder 提供的鏈式調用幫助我們更輕松的創建對象。但是實驗后卻發現子類的 @Builder 是不會包含父類的屬性。

假設存在父類 A:

@Data @Builder public?class?A?{private?String?aName;private?String?aAge; }

存在子類 B:

@Builder @Data @EqualsAndHashCode(callSuper?=?true) public?class?B?extends?A?{private?String?bName;private?String?bAge; }

使用 builder 進行初始化時,類 A 可以正常創建,類 B 僅可以初始化自己的屬性,父類屬性無法初始化。

二、解決:構造方法

查閱網絡后,一種解決方法是利用構造方法:

  • 父類生成全參構造方法

  • 子類手動聲明全參構造方法

  • 將子類 @builder 注解移動全參構造方法上,并設置 builderMethodName

@Data @Builder @NoArgsConstructor @AllArgsConstructor public?class?A?{private?String?aName;private?String?aAge; } @Data @EqualsAndHashCode(callSuper?=?true) @ToString(callSuper?=?true) public?class?B?extends?A?{private?String?bName;private?String?bAge;@Builder(builderMethodName?=?"childBuilder")public?B(String?aName,?String?aAge,?String?bName,?String?bAge)?{super(aName,?aAge);this.bName?=?bName;this.bAge?=?bAge;} }

修改 Main 方法如下:

public?class?BuilderMain?{public?static?void?main(String[]?args)?{A?xxx?=?A.builder().aName("xxx").aAge("111").build();B?yyy?=?B.childBuilder().aName("xxx").aAge("111").bName("yyy").bAge("222").build();System.out.println(xxx);System.out.println(yyy);} }

代碼運行后,能得到正確結果:

A(aName=xxx,?aAge=111) B(super=A(aName=xxx,?aAge=111),?bName=yyy,?bAge=222)

但是這種方式弊端也很明顯:

  • 子類調用父類的全參構造,當父類參數數量、順序調整時,子類也需要同步調整。

  • 如果父類參數過多,構造方法十分不優雅。

三、解決:SuperBuilder

Lombok 自 v1.18.2 開始,為了解決這個問題,引入了 @SuperBuilder 注解,使用該注解,就可以很容易解決這個問題。

修改代碼如下:

@Data @SuperBuilder public?class?A?{private?String?aName;private?String?aAge; } @SuperBuilder @Data @EqualsAndHashCode(callSuper?=?true) @ToString(callSuper?=?true) public?class?B?extends?A?{private?String?bName;private?String?bAge; }

Main 方法保持不變,代碼運行后,能得到正確結果:

A(aName=xxx,?aAge=111) B(super=A(aName=xxx,?aAge=111),?bName=yyy,?bAge=222)

另外自 v1.18.4 也給 SuperBuilder 引入了toBuilder 參數,可以很方便的進行淺拷貝對象,效率雖然比手動 builder 慢一點,但也算是挺快的。

@Data @SuperBuilder(toBuilder?=?true) public?class?A?{private?String?aName;private?String?aAge; }

給 B 加入屬性 C,測試對象拷貝:

@SuperBuilder(toBuilder?=?true) @Data @EqualsAndHashCode(callSuper?=?true) @ToString(callSuper?=?true) public?class?B?extends?A?{private?String?bName;private?String?bAge;private?C?c; }

~

@AllArgsConstructor public?class?C?{private?String?name; }

輸出結果如下:

public?class?BuilderMain?{public?static?void?main(String[]?args)?{B?b?=?B.builder().aName("xxx").aAge("111").bName("yyy").bAge("222").c(new?C("zhangsan")).build();System.out.println(b);System.out.println(b.toBuilder().build());} } B(super=A(aName=xxx,?aAge=111),?bName=yyy,?bAge=222,?c=com.github.jitwxs.demo.builder.C@52cc8049) B(super=A(aName=xxx,?aAge=111),?bName=yyy,?bAge=222,?c=com.github.jitwxs.demo.builder.C@52cc8049)

四、彩蛋

由于 @SuperBuilder 剛引入不久,所以還是有一些 BUG 的,比如當你的 SpringBoot 版本為 2.2.3.RELEASE 時,或者你的 Lombok 版本低于 v1.18.12 時,使用上文的例子,你就會發現竟然無法通過編譯。

實際的原因是不支持用 B 來命名類,簡直是吐出一口老血,好在升級到 v1.18.12 版本后就修復了這個問題,可能這就是給不規范命名的人埋的坑吧,哈哈。

推薦文章
  • 今天給大家推薦 6 個 Spring Boot 項目,拿來就可以賺錢!

  • 分享一套基于SpringBoot和Vue的企業級中后臺開源項目,這個項目有點哇塞!

  • 圈子哥推薦一款基于 Spring Boot 開發 OA 開源產品,學習/搞外快都是不二選擇!

  • 硬剛一周,3W字總結,一年的經驗告訴你如何準備校招!

原創電子書歷時整整一年總結的?Java 面試 + Java 后端技術學習指南,這是本人這幾年及校招的總結,各種高頻面試題已經全部進行總結,按照章節復習即可,已經拿到了大廠offer。 原創思維導圖掃碼或者微信搜?程序員的技術圈子?回復?面試?領取原創電子書和思維導圖。

總結

以上是生活随笔為你收集整理的Lombok 子类如何使用 @Builder的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产免费观看视频 | 精品一区二区免费看 | av电影一区二区三区 | 99网站| 你懂的在线免费观看 | 国产最新在线 | 蜜桃av一区二区 | 国产一区二区亚洲 | 国产av不卡一区 | 在线观看国产三级 | 日韩av综合网站 | 美景之屋电影免费高清完整韩剧 | 三日本三级少妇三级99 | 97精品| 激情无遮挡 | 六十路息与子猛烈交尾 | 97精品国产97久久久久久免费 | 91婷婷在线 | 日操干 | 中文字幕人乱码中文字 | av作品在线观看 | 特级特黄刘亦菲aaa级 | 1000部啪啪未满十八勿入超污 | 婚后打屁股高h1v1调教 | 欧美成人免费视频 | 99热3| 欧美精品一区二区三区三州 | aⅴ天堂网 | 精品无码人妻一区二区三区品 | 久久久福利视频 | 亚洲av日韩av永久无码下载 | 欧美成人亚洲 | 国产爆乳无码一区二区麻豆 | 毛片aaaaaa| 人妻无码久久一区二区三区免费 | 琪琪在线视频 | 老汉av在线 | aaa成人| 国产a级片视频 | 97日韩精品 | 日本a级免费 | av在线在线| 超碰国产在线观看 | 少妇精品久久久久久久久久 | 8x8x国产精品一区二区 | 日本在线视频免费观看 | 伊人久久久久久久久久久久久 | 美女131爽爽爽做爰视频 | 黄色精品视频 | 国产成人无码www免费视频播放 | 性开放的欧美大片 | 一区二区三区在线 | 欧美日韩成人一区二区在线观看 | 久久精品天堂 | 国产免费福利 | 黄在线观看免费 | 国产亚洲精久久久久久无码苍井空 | 华人av在线 | 岛国免费av | 欧美成人精品一区二区免费看片 | 女人的黄色片 | 三级无遮挡 | 天天想你免费观看完整版高清电影 | 麻豆国产91在线播放 | 瑟瑟在线观看 | 国产毛片毛片毛片毛片毛片毛片 | 在线观看a级片 | 美国黄色网址 | 九七电影院97理论片 | 好色综合| 国产第一精品 | 亚洲黄色在线 | jiizzyou欧美2 | 自拍偷拍亚洲区 | 日本极品喷水 | 午夜视频h| 国产精品高清无码在线观看 | 国产精品无码AV无码国产 | 一区二区三区精品视频在线观看 | 一区不卡av | 成人激情小说网站 | 日韩美女三级 | 欧美成欧美va | 中文字幕日韩一区 | 国产精品高清无码在线观看 | 超污视频网站 | 黄色网址在线免费播放 | 人人干人人爽 | 日本精品网站 | 欧美另类视频 | 日本特级黄色录像 | 黑丝一区二区三区 | 深夜福利电影 | 成人国产精品久久久网站 | 69中国xxxxxxxxx69| 97超在线| 爱爱免费小视频 | 国产免费一区二区视频 | 精品国产网 |