Procházení kolekce a null v Javě
Pravděpodobně už jste narazili na nutnost ošetřovat různé nestandardní případy, např. když vaší metodě někdo podstrčí jako parametr null.
Mějme tento kód:
Collection<String> kolekce = …; for (String s : kolekce) { System.out.println(s); }
Co když ale kolekce
bude null
? S tímto případem musíme počítat, jinak nás čeká nepříjemná NullPointerException
. Měli bychom tedy kód obalit try { … } catch (NullPointerException e) { … }
nebo if (kolekce != null) { … }
.
Asi si řeknete, že je to pěkná otrava a že by bylo lepší, kdyby se cyklus for
choval k null
kolekci stejně jako k prázdné kolekci (tzn. neproběhne ani jedna iterace, ale nedojde k chybě). Takový cyklus v Javě sice nemáme, ale řešení je poměrně jednoduché.
Vytvoříme si pomocnou metodu (funkci):
public static <T> Collection<T> notNull(Collection<T> kolekce) { if (kolekce == null) { return Collections.emptyList(); } else { return kolekce; } }
A cyklus budeme procházet tímto způsobem:
for (String s : notNull(kolekce)) { System.out.println(s); }
Díky generické metodě notNull()
jsme dosáhli požadovaného chování a ani nebylo potřeba upravovat jazyk nebo do něj zanášet makra a podobné hrůzy :-).