<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          盤點(diǎn)Lombok的幾個(gè)騷操作,你絕對(duì)沒(méi)用過(guò)!

          共 6083字,需瀏覽 13分鐘

           ·

          2024-04-30 14:11

          ?? 歡迎加入小哈的星球 ,你將獲得: 專屬的項(xiàng)目實(shí)戰(zhàn) / Java 學(xué)習(xí)路線 / 一對(duì)一提問(wèn) / 學(xué)習(xí)打卡 /  贈(zèng)書福利


          全棧前后端分離博客項(xiàng)目 2.0 版本完結(jié)啦, 演示鏈接http://116.62.199.48/ ,新項(xiàng)目正在醞釀中。全程手摸手,后端 + 前端全棧開發(fā),從 0 到 1 講解每個(gè)功能點(diǎn)開發(fā)步驟,1v1 答疑,直到項(xiàng)目上線。目前已更新了239小節(jié),累計(jì)38w+字,講解圖:1645張,還在持續(xù)爆肝中.. 后續(xù)還會(huì)上新更多項(xiàng)目,目標(biāo)是將Java領(lǐng)域典型的項(xiàng)目都整一波,如秒殺系統(tǒng), 在線商城, IM即時(shí)通訊,Spring Cloud Alibaba 等等,戳我加入學(xué)習(xí),已有1300+小伙伴加入(早鳥價(jià)超低)


          前言

          本文不討論對(duì)錯(cuò),只講騷操作。

          有的方法看看就好,知道可以這么用,但是否應(yīng)用到實(shí)際開發(fā)中,那就仁者見仁,智者見智了。

          一萬(wàn)個(gè)讀者就會(huì)有一萬(wàn)個(gè)哈姆雷特,希望這篇文章能夠給您帶來(lái)一些思考。

          耐心看完,你一定會(huì)有所收獲。

          @onX

          例如 onConstructor, oMethod, 和 onParam 允許你在生成的代碼中注入自定義的注解。一個(gè)常見的用例是結(jié)合 Spring 的 @Autowired

          在 Spring 的組件(如 @Service@Controller@Component@Repository 等)中使用 @RequiredArgsConstructor(onConstructor = @__(@Autowired)),可以讓 Lombok 在生成構(gòu)造函數(shù)時(shí)也加上 @Autowired 注解,這樣,Spring 就可以自動(dòng)注入所需的依賴。

          例如下面這段代碼

          @Service
          @RequiredArgsConstructor(onConstructor = @__(@Autowired))
          public class MyService {
              private final AnotherService anotherService;
          }

          上述代碼片段使用 Lombok 和 Spring 注解,Lombok 會(huì)為其生成以下代碼

          @Service
          public class MyService {
              private final AnotherService anotherService;

              @Autowired
              public MyService(AnotherService anotherService) {
                  this.anotherService = anotherService;
              }
          }

          從生成的代碼中可以看出:

          • MyService 生成了一個(gè)構(gòu)造函數(shù),該構(gòu)造函數(shù)接受一個(gè) AnotherService 類型的參數(shù)。
          • 由于構(gòu)造函數(shù)上有 @Autowired 注解,Spring 會(huì)自動(dòng)查找合適的 AnotherService bean 實(shí)例并注入到 MyService 中。

          這種方式結(jié)合了 Lombok 的自動(dòng)代碼生成功能和 Spring 的依賴注入功能,使得代碼更為簡(jiǎn)潔。

          但是,使用此技巧時(shí)要確保團(tuán)隊(duì)成員都理解其背后的含義,以避免混淆。

          @Delegate

          @Delegate可以讓你的類使用其他類的方法,而不需要自己寫代碼。

          比如,你有一個(gè)類叫做A,它有一個(gè)方法叫做sayHello(),你想讓另一個(gè)類B也能用這個(gè)方法,那就可以在B類中加上一個(gè)A類型的字段,并在這個(gè)字段上加上@Delegate注解,這樣,B類就可以直接調(diào)用sayHello()方法,就像它是自己的方法一樣。看個(gè)例子:

          // 一個(gè)類,有一個(gè)方法
          public class A {
              public void sayHello() {
                  System.out.println("Hello");
              }
          }

          // 一個(gè)類,委托了A類的方法
          public class B {
              @Delegate // 委托A類的方法
              private A a = new A();

              public static void main(String[] args) {
                  B b = new B();
                  b.sayHello(); // 調(diào)用A類的方法
              }
          }

          這樣寫最大的好處就是可以避免類的層次過(guò)深或者耦合過(guò)緊,提高代碼的可讀性和可維護(hù)性,各種繼承來(lái)繼承去是真的看得頭疼。

          @Cleanup

          @Cleanup可以自動(dòng)管理輸入輸出流等各種需要釋放的資源,確保安全地調(diào)用close方法。

          它的使用方法是在聲明的資源前加上@Cleanup,例如:

          @Cleanup InputStream in = new FileInputStream("some/file");

          這樣,當(dāng)你的代碼執(zhí)行完畢后,Lombok會(huì)自動(dòng)在一個(gè)try-finally塊中調(diào)用in.close()方法,釋放資源。

          如果要釋放資源的方法名不是close,也可以指定要調(diào)用的方法名,例如:

          @Cleanup("release") MyResource resource = new MyResource();

          Lombok會(huì)自動(dòng)在try-finally塊中調(diào)用resource.release()方法,釋放資源。

          可以看到,這比手動(dòng)寫try-finally要簡(jiǎn)潔得太多了,只要使用@Cleanup就能管理任何有無(wú)參方法的資源,指定正確的方法名即可。

          @Singular和 @Builder 組合

          @Builder讓你的類支持鏈?zhǔn)綐?gòu)造,而@Singular讓集合類型字段可以更方便的維護(hù)。

          @Singular注解可以用在集合類型的字段上,它會(huì)生成兩個(gè)方法,一個(gè)是添加單個(gè)元素的方法,一個(gè)是添加整個(gè)集合的方法。這兩個(gè)方法可以和 @Builder 生成的其他方法一起鏈?zhǔn)秸{(diào)用,給你的類的所有字段賦值。

          這么講可能有點(diǎn)懵,直接看示例:

          @Data
          @Builder
          public class User {
              private String name;
              private int age;
              @Singular
              private List<String> hobbies;
          }

          // 使用 @Builder 和 @Singular 生成的方法
          User user = User.builder()
              .name("練習(xí)時(shí)長(zhǎng)兩年半")
              .age(28)
              .hobby("籃球") // 添加單個(gè)元素
              .hobby("唱歌") // 添加單個(gè)元素
              .hobbies(Arrays.asList("跳舞""其他")) // 添加整個(gè)集合
              .build(); // 構(gòu)造 User 對(duì)象

          可以看出,使用 @Singular 注解的好處是,你可以靈活地添加集合類型的字段,而不需要自己創(chuàng)建和初始化集合對(duì)象。

          另外,使用 @Singular 注解生成的集合字段,在調(diào)用 build() 方法后,會(huì)被轉(zhuǎn)換為不可變的集合,這樣可以保證對(duì)象的不變性和線程安全性。你也可以使用 clear() 方法來(lái)清空集合字段,例如:

          User user = User.builder()
              .name("簽")
              .age(28)
              .hobby("說(shuō)唱")
              .hobby("跳舞")
              .clearHobbies() // 清空集合字段
              .hobby("踩縫紉機(jī)") // 重新添加元素
              .build();

          但需要注意的是,如果你的類繼承了一個(gè)父類,那么 @Builder 只會(huì)生成當(dāng)前類的字段和參數(shù),不包括父類的。

          @With

          允許你創(chuàng)建一個(gè)新的對(duì)象,該對(duì)象是當(dāng)前對(duì)象的副本,但某些字段的值已被更改。

          @With  
          public class Person {  
              private String name;  
              private int age;  
          }  
            
          Person person = new Person("Alice", 30);  
          // 創(chuàng)建一個(gè)新的 Person 對(duì)象,其 name 為 "Alice",但 age 為 31
          Person updatedPerson = person.withAge(31); 

          結(jié)尾

          請(qǐng)注意,盡管 Lombok 提供了許多方便的功能,但過(guò)度使用不當(dāng)使用可能會(huì)導(dǎo)致代碼難以理解和維護(hù)。

          因此,在使用這些功能時(shí),務(wù)必始終保持審慎,并且要充分考慮其影響。

          ?? 歡迎加入小哈的星球 ,你將獲得: 專屬的項(xiàng)目實(shí)戰(zhàn) / Java 學(xué)習(xí)路線 / 一對(duì)一提問(wèn) / 學(xué)習(xí)打卡 /  贈(zèng)書福利


          全棧前后端分離博客項(xiàng)目 2.0 版本完結(jié)啦, 演示鏈接http://116.62.199.48/ ,新項(xiàng)目正在醞釀中。全程手摸手,后端 + 前端全棧開發(fā),從 0 到 1 講解每個(gè)功能點(diǎn)開發(fā)步驟,1v1 答疑,直到項(xiàng)目上線。目前已更新了239小節(jié),累計(jì)38w+字,講解圖:1645張,還在持續(xù)爆肝中.. 后續(xù)還會(huì)上新更多項(xiàng)目,目標(biāo)是將Java領(lǐng)域典型的項(xiàng)目都整一波,如秒殺系統(tǒng), 在線商城, IM即時(shí)通訊,Spring Cloud Alibaba 等等,戳我加入學(xué)習(xí),已有1300+小伙伴加入(早鳥價(jià)超低)



               
                  

          1. 我的私密學(xué)習(xí)小圈子~

          2. git提交錯(cuò)了?別慌,直接刪除提交記錄

          3. BigDecimal 為什么可以保證精度不丟失?

          4. 大廠都在用的 Git 代碼管理規(guī)范 !

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          PS:因公眾號(hào)平臺(tái)更改了推送規(guī)則,如果不想錯(cuò)過(guò)內(nèi)容,記得讀完點(diǎn)一下在看,加個(gè)星標(biāo),這樣每次新文章推送才會(huì)第一時(shí)間出現(xiàn)在你的訂閱列表里。

          點(diǎn)“在看”支持小哈呀,謝謝啦

          瀏覽 172
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产69精品久久久久久久久久久久 | 91禁果| 欧美成人精品欧美一级乱 | 伊人一道本| 日本 国产 视频在线 |