[英]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.