方法链以构建一个对象,该对象通过 Lombok Builder 在两个对象上都有另一个对象

问题描述

我有一个 Person 类,它有一个内部类 Address 的引用类型字段。

当实例化一个 Person 对象时,我想通过 Lombok 的 @Builder 使用方法链策略和构建器模式,如下所示。

class PersonTest {

    @Test
    void builder() {
        Person.builder()
                .name("James")
                .addressBuilder()
                    .cityName("SEOul")
                    .zipCode("16814")
                .buildAddress()
                .build();
    }
}

我正在寻找 Lombok 文档和 stackoverflow 中的任何技巧来使用上述构建器模式,但我不能

所以我在构建器类中添加了一些方法,如下所示,并且我的 intellij 没有显示任何错误


@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());
            }
        }
    }
}

然而,在运行测试代码时,有一个构建错误说,

java:com.sample.entity.Person.Address.AddressBuilder 类中的构造函数 AddressBuilder 不能应用于给定类型; 需要:com.sample.entity.Person.PersonBuilder 发现:没有参数 原因:实际和形式参数列表的长度不同

我希望找到任何解决此构建错误方法,或者如果可能的话,找到一种优雅的方式来使用上述方法链。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)