簡體   English   中英

lombok @Builder vs構造函數

[英]lombok @Builder vs constructor

我對java很新。 有人能解釋我使用的優勢, lombok @Builder創建一個對象,而不是構造函數調用?

MyObject o1 = MyObject.builder()
              .id(1)
              .name("name")
              .build();

MyObject o2 = new MyObject(1, "name")

這只是一個更好的可見度問題嗎?

考慮:

Order order = new Order("Alan", "Smith", 2, 6, "Susan", "Smith");

參數是什么意思? 我們必須查看構造函數規范才能找到答案。

現在有了一個建設者:

Order order = Order.builder()
    .originatorFirstName("Alan")
    .originatorLastName("Smith")
    .lineItemNumber(2)
    .quantity(6)
    .recipientFirstName("Susan")
    .recipientLastName("Smith")
    .build();

它更加冗長,但閱讀非常清楚,並且在IDE的幫助下,它也很容易編寫。 構建器本身是一件苦差事,但像Lombok這樣的代碼生成工具對此有所幫助。

有些人認為,如果你的代碼需要構建器可讀,那就暴露出其他氣味。 你使用的基本類型太多了; 你在一個班級里放了太多的田地。 例如,考慮:

Order order = new Order(
     new Originator("Alan", "Smith"),
     new ItemSet(new Item(2), 6),
     new Recipient("Susan", "Smith"));

......不使用構建器,這是不言自明的,因為我們使用的是更多具有單一職責和更少字段的類。

這不是一個特定於lombok的功能,這稱為構建器模式。

想象一下,你有一個包含20個參數的類,其中10個是可選的。 您可以以某種方式使大量構造函數處理此邏輯,或者使用所有這些參數創建構造函數並在某些位置傳遞null。 構建器模式不簡單嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM