Wiele razy sprawdzam, czy sprawdzam wartość zerową podczas pobierania wartości z jakiejś hierarchii danych, aby uniknąć wyjątków NullPointerExcept, które uważam za podatne na błędy i wymagają dużo dodatkowej analizy.
Napisałem bardzo prostą procedurę, która pozwala mi pominąć sprawdzanie wartości zerowej podczas pobierania obiektu ...
public final class NoNPE {
public static <T> T get(NoNPEInterface<T> in) {
try {
return in.get();
} catch (NullPointerException e) {
return null;
}
}
public interface NoNPEInterface<T> {
T get();
}
}
Używam tego trochę tak ...
Room room = NoNPE.get(() -> country.getTown().getHouses().get(0).getLivingRoom());
Powyższe skutkuje otrzymaniem obiektu pokoju lub wartości zerowej, bez konieczności sprawdzania wszystkich poziomów nadrzędnych.
Co sądzisz o powyższym? Czy tworzę problematyczny wzór? Czy Twoim zdaniem jest na to lepszy sposób?
Option
(lub Maybe
) monadę :)
java.util.Optional
zamiast wartości zerowych w celu reprezentowania brakujących danych? Zapewnia to przydatne narzędzia zarówno dla opisywanego przypadku, jak i przypadków, w których chciałbyś nadal korzystać z danych domyślnych, a nie tylko zwracać stan awarii na końcu łańcucha.