I have Person
class that has a reference type field of its inner class Address
.
When instantiate a Person
object I want to use method-chaining tactic and builder pattern via Lombok's @Builder
like below.
class PersonTest {
@Test
void builder() {
Person.builder()
.name("James")
.addressBuilder()
.cityName("Seoul")
.zipCode("16814")
.buildAddress()
.build();
}
}
I was looking for any tricks from the Lombok docs and stackoverflow to use builder-pattern like above, but I couldn't
So I added some methods to the builder classes like below, and with my intellij it shows no error.
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Person {
private String name;
private Address address;
public static class PersonBuilder {
public Address.AddressBuilder addressBuilder(){
return new Address.AddressBuilder(this);
}
}
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
private static class Address {
private String cityName;
private String zipCode;
public static class AddressBuilder{
private PersonBuilder personBuilder;
private AddressBuilder(PersonBuilder personBuilder){
this.personBuilder=personBuilder;
}
public PersonBuilder buildAddress(){
return personBuilder.address(this.build());
}
}
}
}
However, when running the test code, there is a build error saying,
java: constructor AddressBuilder in class com.sample.entity.Person.Address.AddressBuilder cannot be applied to given types; required: com.sample.entity.Person.PersonBuilder found: no arguments reason: actual and formal argument lists differ in length
I wish to find any solution to this build error, or if possible a graceful way to use method-chain like above.