lombok @Builder的方法

时间:2017-09-06 20:23:23

标签: java lombok

我想使用流畅的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在方法上的正确用法吗?

1 个答案:

答案 0 :(得分:4)

这是您使用默认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的内部静态类,具有相同的类型参数   作为静态方法(称为构建器)。
  •   
  • 在构建器中:目标的每个参数的一个私有非静态非最终字段。
  •   
  • 在构建器中:一个包私有no-args空构造函数。
  •   
  • 在构建器中:对于目标的每个参数,类似“setter”的方法:它与该参数的类型相同,同名。它返回构建器   本身,以便可以链接setter调用,如上所述   示例
  •   
  • 在构建器中:调用方法的build()方法,   在每个领域传球。它返回与目标相同的类型   回报。
  •   
  • 在构建器中:一个合理的toString()实现。
  •   
  • 在包含目标的类中:一个builder()方法,它创建一个新的   建造者的实例。
  •   

这是一个任意示例,显示您可以为2个方法使用2个构建器,并且它可以正常工作。

@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");
}