gpt4 book ai didi

java - lombok - 多个镜头中的@Builder 模式

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:37 26 4
gpt4 key购买 nike

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

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

关于java - lombok - 多个镜头中的@Builder 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48349077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com