Guava:任意值或空集的ImmutableSet

时间:2010-01-08 01:51:06

标签: java guava

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

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

当geoR.getFailed()返回一个或多个条目时,它的效果很好。

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

当它为null时,我需要一个

Set foo = ImmutableSet.of();

干净的方法是什么?

2 个答案:

答案 0 :(得分:17)

这是关于番石榴和ImmutableSet的问题,但真正的问题在于aGeoR.getFailed()。它基本上永远不适合返回null的集合返回方法。它应该返回一个空集开头(参见Effective Java);是的,它不会给用户带来一些痛苦。

当我必须处理这样的API时,我无法解决它或修复它,我完全按照你在@Jherico的答案修订版中所做的那样。

Set<FailedGeoR> failedOrNull = aGeoR.getFailed();
Set<FailedGeoR> failed = (failedOrNull == null)
    ? ImmutableSet.<FailedGeoR>of()
    : ImmutableSet.copyOf(failedOrNull);

答案 1 :(得分:2)

Set foo = aGeoR.getFailed();
foo = foo == null ? new HashSet() : ImmutableSet.copyOf(foo);