Plusieurs fois, je me retrouve à vérifier null lors de la récupération d'une valeur dans une hiérarchie de données pour éviter les NullPointerExceptions, que je trouve sujettes à des erreurs et qui nécessitent beaucoup de passe-partout.
J'ai écrit une routine très simple qui me permet d'ignorer la vérification nulle lors de la récupération d'un objet ...
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();
}
}
Je l'utilise un peu comme ça ...
Room room = NoNPE.get(() -> country.getTown().getHouses().get(0).getLivingRoom());
Ce qui précède m'a permis d'obtenir un objet Room ou un null, sans avoir à vérifier tous les niveaux parent.
Que pensez-vous de ce qui précède? Suis-je en train de créer un motif problématique? Existe-t-il une meilleure façon de procéder à votre avis?
Option
(ou Maybe
) monade :)
java.util.Optional
au lieu de null pour représenter les données manquantes? Cela fournit des utilitaires pratiques à la fois pour le cas que vous décrivez et les cas où vous souhaitez continuer avec des données par défaut plutôt que de simplement renvoyer une condition d'échec à la fin de la chaîne.