gpt4 book ai didi

java - 使用构建器模式添加到 Set<>

转载 作者:行者123 更新时间:2023-11-29 05:00:13 25 4
gpt4 key购买 nike

我有一个包含 Set<> 的类的对象,我想创建一个类,以便在客户端代码完全添加到这个 Set<> 之前不能完全实例化它。 .我正在考虑使用 Builder 模式,而不是设置 Set<> ,并考虑添加到它,像这样:

public final class SyncManager {
private ServiceManager serviceManager;

private SyncManager(Builder builder) {
serviceManager = new ServiceManager(builder.services);
}

public static Builder newBuilder() {
return new Builder();
}

/**
* {@code SyncManager} builder static inner class.
*/
public static final class Builder {
private Set<Service> services;

private Builder() {
this.services = new HashSet<>();
}

/**
* Adds the {@code services} and returns a reference to this Builder so that the methods can be chained together
* and more services can be added.
*
* @param newService the {@code services} to set
* @return a reference to this Builder
*/
public Builder addService(Service newService) {
services.add(newService);
return this;
}

/**
* Returns a {@code SyncManager} built from the parameters previously set.
*
* @return a {@code SyncManager} built with parameters of this {@code SyncManager.Builder}
*/
public SyncManager build() {
return new SyncManager(this);
}
}
}

这没关系吧?我正在尝试考虑其他方法来确保 SyncManager直到所有需要添加到 Set<> 的东西都没有完全实例化是的,我知道我可以创建 Set<>在外面传递给SyncManager在构造函数中,但我不想公开它。

如果有更好的方法来完成我正在做的事情,任何意见都会有所帮助!

最佳答案

如果您想确保集合不会在构建器/对象之外发生突变,这似乎是一种完全合理的构建对象的方法。

如果要确保调用者在调用后未修改集合,则在外部构造它并将其传递给构造函数需要将其复制到新的 Set<>。

关于java - 使用构建器模式添加到 Set<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32360238/

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