NEVER do this:
public Collection<T> doTheMacarena() { if (isPresidentialElection()) return null; return visitSouthAmerica(); }
ALWAYS throw exceptions or return empty collections; never use null
as a kind of "soft exception". Either:
if (isPresidentialElection()) throw new UnwiseCampaignTacticException();
Or:
if (isPresidentialElection()) return Collections.emptySet();
Are preferable, depending on whether the return-condition is fast-failure or the "no data" sort.
How would you like to spend your day debugging:
for (final Dancer dander : doTheMacarena()) dancer.dazzleWithSmoothMoves();
From inside miles of nested code across several transaction and remote boundaries?
UPDATE: A nice post from Nishanth Shastry on the for-each loop. Look at item #6, Return zero length arrays or empty lists rather than nulls.