繁体   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