4

我需要一个更简洁的解决方案来使用 ImmutableSet。我的代码看起来像

Set foo = ImmutableSet.copyOf(aGeoR.getFailed());

当 aGeoR.getFailed() 返回一个或多个条目时,它工作得很好。

当返回的集合为空时,它会失败。

当它为空时,我需要一个

Set foo = ImmutableSet.of();

这样做的干净方法是什么?

4

2 回答 2

17

这被表述为关于 Guava 和的问题ImmutableSet,但这里真正的问题是 with aGeoR.getFailed()。集合返回方法返回 null 本质上是不合适的。它应该返回一个空集(参见 Effective Java);是的,事实并非如此,这会给用户带来一些痛苦。

当我必须处理这样的 API 并且我无法修复它或修复它时,我会完全按照您在 @Jherico 的答案的修订中显示的内容进行操作。

Set<FailedGeoR> failedOrNull = aGeoR.getFailed();
Set<FailedGeoR> failed = (failedOrNull == null)
    ? ImmutableSet.<FailedGeoR>of()
    : ImmutableSet.copyOf(failedOrNull);
于 2010-01-08T05:40:59.093 回答
2
Set foo = aGeoR.getFailed();
foo = foo == null ? new HashSet() : ImmutableSet.copyOf(foo);
于 2010-01-08T02:04:13.377 回答