5

我有一个带有参数的方法Collection<Foo> foos,它可以是 NULL。我想以输入的本地副本作为ImmutableSet. 现在我的代码如下所示:

if (foos == null)
{
  this.foos = ImmutableSet.of();
}
else
{
  this.foos = ImmutableSet.copyOf(foos);
}

有没有更清洁的方法来做到这一点?如果foos是一个简单的参数,我可以做类似的事情,Objects.firstNonNull(foos, Optional.of())但我不确定是否有类似的东西来处理集合。

4

2 回答 2

12

我不明白你为什么不能使用Objects.firstNonNull

this.foos = ImmutableSet.copyOf(Objects.firstNonNull(foos, ImmutableSet.of()));

如果这是您的事情,您可以使用静态导入保存一些输入:

import static com.google.common.collect.ImmutableSet.copyOf;
import static com.google.common.collect.ImmutableSet.of;
// snip...
this.foos = copyOf(Objects.firstNonNull(foos, of()));
于 2013-07-03T17:14:20.210 回答
7

ACollection与其他任何参考一样,因此您可以这样做:

ImmutableSet.copyOf(Optional.fromNullable(foos).or(ImmutableSet.of()));

但这变得很难写。更简单:

foos == null ? ImmutableSet.of() : ImmutableSet.copyOf(foos);
于 2013-07-03T17:13:56.527 回答