我有一个接受字符串和 List 对象的类。我可以使用构建器单独创建一个 List 对象,并将其传递给另一个构建器来创建对象。但这看起来并不是一个好方法。他们有什么方法可以将这两个构建器合并到一个构建器中吗?
@Data
@Builder
public class CustomerRequest{
private String cutspec;
private List<Customer> listOfcustomer;
}
当前实施情况
Customer customer = Customer.builder().conditionType("valueCondition").key("customerNo")
.operator("=").value(customerId).build();
List<Customer> listOfcustomer = new ArrayList<>();
listOfcustomer.add(customer);
return CustomerRequest.builder().name("John").simplecustomer(listOfcustomer).build();
您可以为 CustomerRequest 类创建自定义构建器。然后,您可以直接在 CustomerRequest 构建器中构建 Customer 对象,无需创建单独的列表,然后将其传递给 CustomerRequest 构建器。
@Data
@Builder
public class CustomerRequest {
private String cutspec;
private List<Customer> listOfcustomer;
public static class CustomerRequestBuilder {
private List<Customer> listOfcustomer = new ArrayList<>();
public CustomerRequestBuilder customer(Customer customer) {
this.listOfcustomer.add(customer);
return this;
}
}
}
之后,您可以使用自定义构建器直接创建一个 CustomerRequest 对象及其关联的 Customer 对象:
Customer customer = Customer.builder()
.conditionType("valueCondition")
.key("customerNo")
.operator("=")
.value(customerId)
.build();
return CustomerRequest.builder()
.cutspec("someCutSpec")
.customer(customer)
.build();
使用 Java 9 的 List.of() 方法你可以这样做:
return CustomerRequest.builder()
.name("John")
.simplecustomer(List.of(
Customer.builder().conditionType("valueCondition").key("customerNo")
.operator("=").value(customerId).build()
))
.build();
请注意,结果列表是不可变的。