打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java – lombok – 多个镜头中的@Builder模式

我使用lombok project的@Builder,所以请考虑我有这个例子:

@Builderpublic class Client {    private @Getter @Setter Integer id;    private @Getter @Setter String name;}

这相当于:

public class Client {    private @Getter @Setter Integer id;    private @Getter @Setter String name;    public static class Builder {        private Integer id;        private String name;        private Builder() {        }        public Builder id(final Integer value) {            this.id = value;            return this;        }        public Builder name(final String value) {            this.name = value;            return this;        }        public Client build() {            return new Client(this);        }    }    public static Client.Builder builder() {        return new Client.Builder();    }    private Client(final Builder builder) {        this.id = builder.id;        this.name = builder.name;    }}

当我尝试一次性设置所有字段时没有问题:

public static void main(String[] args) {    Client client = Client.builder()            .id(123)            .name("name")            .build();}

输出:

Client{id=123, name=name}

现在,考虑我想要多次拍摄.例如:

public static void main(String[] args) {    Client client = Client.builder()            .id(123)//<-------------------------- Set just the id            .build();    client = Client.builder()            .name("name")//<--------------------- Set name            .build();}

这在逻辑上为id返回null:

Client{id=null, name=name}

通常,没有lombok,我通过在Builder类中添加一个新的构造函数来解决这个问题,该构造函数采用相同的对象:

public static class Builder {    // ...    public Builder(Client client) {        this.id = client.id;        this.name = client.name;    }    // ...}

然后我将我的对象传递给该构造函数:

Client client = Client.builder()        .id(123)        .build();client = new Client.Builder(client)//<---------------- Like this         .name("name")        .build();

这解决了我的问题,但我不能用lombok来解决它.有什么方法可以解决这个问题吗?

解决方法:

您可以使用toBuilder属性来执行此操作.

@Builder(toBuilder=true)public class Client {    private @Getter @Setter Integer id;    private @Getter @Setter String name;}

然后你可以这样使用它

public void main(String[] args){    Client client = Client.builder()        .id(123)        .build();    client = client.toBuilder()        .name("name")        .build();}
来源:https://www.icode9.com/content-1-335051.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用好这个 IDEA 插件,写代码效率至少提升 5 倍!
Java:Lombok插件用法笔记
一些没用的小技巧
这 12 款 idea 插件,能让你代码飞起来
JAVA eclipse 安装lombok
判断getter/setter方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服