使用 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));
}
我想使用 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));
}