У меня есть класс, который принимает строку и объект списка. Я могу создать объект списка отдельно с помощью построителя и передать его другому построителю для создания объекта. Но это не выглядит хорошим способом. Есть ли какой-либо способ объединить эти 2 строителя в одного строителя.
@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();
Как билдер, сгенерированный Lombok, оказывается там с именем метода simplecustomer?




Вы можете создать собственный построитель для класса CustomerRequest. Затем вы можете напрямую построить объект Customer внутри построителя CustomerRequest, и нет необходимости создавать отдельный список, а затем передавать его построителю 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();
Используя метод List.of() в Java 9, вы можете сделать:
return CustomerRequest.builder()
.name("John")
.simplecustomer(List.of(
Customer.builder().conditionType("valueCondition").key("customerNo")
.operator(" = ").value(customerId).build()
))
.build();
Просто имейте в виду, что полученный список неизменен.
Можете ли вы показать, какое использование вы ищете? Как вы хотите использовать «объединенный» строитель?