[英]Lombok @Builder does not create immutable objects?
在許多站點中,我看到 lombok @Builder 可用於創建不可變對象( https://www.baeldung.com/lombok-builder-singular ),也有許多站點說 Builder 模式主要用於創建不可變對象。
TimeIntervalData td = TimeIntervalData.builder().endTime("12:00").startTime("10:00").build();
td.setEndTime("14:00");
System.out.println(td.getEndTime());
我不確定如何在使用構建器構建的對象上使用設置器。 我在這里缺少什么嗎?
是的,lombok builder 不會創建不可變實例,因為用戶將 class 中的參數定義為final
,根據lombok.builder的文檔,@ @Builder
允許您自動生成使 class 可實例化所需的代碼,例如:
Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();
根據文檔,它只創建內部 static class 具有相同的屬性,方法與外部 class 中提到的相同
使用 @Builder 注釋的方法(從現在開始稱為目標)會導致生成以下 7 件事:
但是對集合屬性使用帶有@Builder注釋的@Builder
會使它們成為 singleton
通過使用@Singular 注釋來注釋參數之一(如果使用@Builder 注釋方法或構造函數)或字段(如果使用@Builder 注釋class),lombok 會將該構建器節點視為一個集合,並生成 2'adder ' 方法而不是 'setter' 方法。 一種將單個元素添加到集合中,另一種將另一個集合的所有元素添加到集合中。 不會生成僅設置集合(替換已添加的任何內容)的設置器。
@Singular 只能應用於 lombok 已知的集合類型。
主要用於創建不可變對象
這種說法是不正確的。 主要目的是減少樣板代碼。 使用 builder 創建 object 更緊湊,更易於編寫和閱讀。
當你有 1-2 個屬性時,builder 可能是不利的,並且與通過構造函數傳遞參數相比,它會使代碼的可讀性降低。
因此,何時使用或不使用 builder 是個人喜好問題。
對setter:如果需要setter,可以通過@Data注解生成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.