使用 Guava 的不可变类型的防御副本的更简洁代码?

More succinct code for a defensive copy using Guava's immutable types?

我想使用 Guava 的不可变类型制作传递到方法中的集合的防御性副本,例如一个ImmutableList。我还必须能够处理 null 输入并将其视为空集合。

我能想到的最干净的是:

  public void setStrings(List<String> strings) {
     this.strings = strings == null ? ImmutableList.of() : ImmutableList.copyOf(strings);
  }

有没有更易读的东西,最好没有三元运算符?由于我与 分享的推理,我不会将 Optional.of(strings).map(...).orElse(...) 视为一个不错的选择。

你可以使用MoreObjects.firstNonNull,同样来自Guava:

public void setStrings(List<String> strings) {
     this.strings = ImmutableList.copyOf(MoreObjects.firstNonNull(strings, Collections.emptyList()));
}

另外,ListUtils.emptyIfNull 是 Apache Commons Collections 中的一种类似但更专业的方法,在我看来它更清晰易读:

public void setStrings(List<String> strings) {
     this.strings = ImmutableList.copyOf(ListUtils.emptyIfNull(strings));
}