Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Guava: ImmutableSet of either values or an empty set

Tags:

java

guava

I need a cleaner solution to using an ImmutableSet. I have code that looks like

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

it works great when aGeoR.getFailed() returns one or more entries.

it fails when the returned set is null.

When its null, I need a

Set foo = ImmutableSet.of();

What is the clean way to do this?

like image 443
fishtoprecords Avatar asked Dec 01 '22 06:12

fishtoprecords


1 Answers

This is phrased as a question about Guava and ImmutableSet, but the real issue here is with aGeoR.getFailed(). It is essentially never appropriate for a collection-returning method to return null. It should be returning an empty set to begin with (see Effective Java); and yeah, the fact that it isn't is going to cause some pain to users.

When I have to deal with an API like that, and I can't fix it or get it fixed, I do exactly what you showed in your revision of @Jherico's answer.

Set<FailedGeoR> failedOrNull = aGeoR.getFailed();
Set<FailedGeoR> failed = (failedOrNull == null)
    ? ImmutableSet.<FailedGeoR>of()
    : ImmutableSet.copyOf(failedOrNull);
like image 54
Kevin Bourrillion Avatar answered Dec 05 '22 07:12

Kevin Bourrillion