簡體   English   中英

lombok @Builder方法

[英]lombok @Builder on method

我想使用流暢的Api來減少方法的參數列表。 我不想為此創建一個構造函數,所以我用Lombok- @ Builder注釋了該方法:

@Builder
public static void test(User user, Item item, int age, Map<String, Test> tests, LocalDateTime time, String desc){
        ..method related things..
}

現在,我希望使用@Builder的Fluent-Api調用該方法:

test.withUser(u).withItem(i)...build();

但是,由於我在該方法周圍沒有任何獲取方法和設置方法,因此該方法沒有流利的Api。 這是@Builder在方法上的正確使用嗎?

這是使用默認的Builder語法的方式。

@Builder
public static void test(User user, Item item){
    // ...
}

public void buildTestExample(){
    builder()
            .user(new User())
            .item(new Item())
            .build();
}

但是,您可以這樣指定方法名稱:

@Builder(builderMethodName = "buildTest")
public static void test(User bar, Item item){
    // ...
}

public void buildTestExample(){
    buildTest()
            .user(new User())
            .item(new Item())
            .build();
}

參見https://projectlombok.org/features/Builder

用@Builder注釋的方法(從現在開始稱為目標)將生成以下7件事:

  • 內部靜態類,名為FooBuilder,具有與靜態方法相同的類型參數(稱為生成器)。
  • 在構建器中:目標的每個參數都有一個私有的非靜態非最終字段。
  • 在構建器中:包私有的無參數空構造函數。
  • 在構建器中:針對目標的每個參數的類似於“ setter”的方法:它具有與該參數相同的類型和相同的名稱 如上例所示,它返回構建器本身,以便可以將setter調用鏈接起來。
  • 在構建器中:一個build()方法,該方法調用該方法,並在每個字段中傳遞。 它返回與目標返回相同的類型。
  • 在構建器中:明智的toString()實現。
  • 在包含目標的類中:builder()方法,該方法創建構建器的新實例。

這是一個任意示例,顯示您可以為2個方法使用2個Builders,並且工作正常。

@Builder(builderMethodName = "buildFoo")
public static String foo(String param1, String param2){
    return "foo" + param1 + param2;
}

@Builder(builderMethodName = "buildBar")
public static String bar(String param1, String param2){
    return "bar" + param1 + param2;
}

@Test
public void test(){

   assertThat(buildFoo().param1("h").param2("w").build()).isEqualTo("foohw");

   assertThat(buildBar().param1("h").param2("w").build()).isEqualTo("foohw");
}

暫無
暫無

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

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