gpt4 book ai didi

java - 如何将普通List变成ImmutableList?

转载 作者:行者123 更新时间:2023-12-01 10:33:59 28 4
gpt4 key购买 nike

我有下面的构建器模式,它是线程安全的,并且还确保 parameterMapdataType 在分配给 InputKeys 类后无法修改通过使用 ImmutableMap 和 ImmutableList Guava 类。

public final class InputKeys {

private final long userid;
private final long clientid;
private final List<String> holderEntry;

private static final ImmutableList<String> DEFAULT_TYPE = ImmutableList.of("HELLO");

private InputKeys(Builder builder) {
this.userid = builder.userId;
this.clientid = builder.clientid;
this.holderEntry = builder.holderEntry.build();
}

public static class Builder {
protected final long clientid;
protected long userid;
protected ImmutableList.Builder<String> holderEntry = ImmutableList.<String>builder().addAll(DEFAULT_TYPE);

public Builder(InputKeys key) {
this.clientid = key.clientid;
this.userid = key.userid;
this.holderEntry = ImmutableList.<String> builder().addAll(key.holderEntry);
}

public Builder(long clientid) {
this.clientid = clientid;
}

public Builder setUserId(long userid) {
this.userid = Long.valueOf(userid);
return this;
}

public Builder addEntry(List<String> holderEntry) {
this.holderEntry.addAll(holderEntry);
return this;
}

public InputKeys build() {
return new InputKeys(this);
}
}

// getters here
}

现在我有两个要求:

  • 如果没有人调用 addEntry 方法,那么我的 holderEntry 列表中应该只包含 HELLO。
  • 如果有人使用某些字符串列表调用 addEntry 方法,我只想使用他们传递的列表。

根据我当前的设计,假设如果有人传递了其中包含 WORLD 字符串的新 List,那么我的 holderEntry 变量包含两个值,一个是 HELLO ,另一个是 WORLD,这是错误的。在这种情况下我只想拥有世界。如何解决这个问题?

最佳答案

为什么不在构建器中默认将 holderEntry 保留为空?

InputKeys 的构造函数中,您将检查 builder.holderEntry 是否为空。如果是这样,您可以将 this.holderEntry 设置为 DEFAULT_TYPE。它也会更高效、更清洁。

构建器中:

 protected ImmutableList.Builder<String> holderEntry = ImmutableList.<String>builder();

InputKeys构造函数中:

List<String> holderEntry = builder.holderEntry.build();
this.holderEntry = holderEntry.isEmpty() ? DEFAULT_TYPE : holderEntry;

关于java - 如何将普通List变成ImmutableList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34914165/

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