I want to make a defensive copy of a collection passed into a method using Guava's immutable types, e.g. an ImmutableList
. I must also be able to deal with null
input and treat that like an empty collection.
The cleanest I could come up with was this:
public void setStrings(List<String> strings) {
this.strings = strings == null ? ImmutableList.of() : ImmutableList.copyOf(strings);
}
Is there something more readable, preferably without the ternary operator? I wouldn't consider Optional.of(strings).map(...).orElse(...)
as a nice alternative due to the reasoning that I share with this answer.
You can use MoreObjects.firstNonNull
, which is also from Guava:
public void setStrings(List<String> strings) {
this.strings = ImmutableList.copyOf(MoreObjects.firstNonNull(strings, Collections.emptyList()));
}
Alternatively ListUtils.emptyIfNull
is a similar but more specialized method in Apache Commons Collections which is more clear and easier to read in my opinion:
public void setStrings(List<String> strings) {
this.strings = ImmutableList.copyOf(ListUtils.emptyIfNull(strings));
}