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