Cela pourrait ressembler à une question primitive ou cela pourrait être fait par une méthode de bibliothèque d'utilitaires simple que je ne connais pas.
L'objectif est de vérifier la valeur d'un champ booléen imbriqué sous deux objets.
private boolean sourceWebsite(Registration registration) {
Application application = registration.getApplication();
if (application == null) {
return true;
}
Metadata metadata = application.getMetadata();
if (metadata == null) {
return true;
}
Boolean source = metadata.getSource();
if (source == null) {
return true;
}
return !source;
}
Je sais que cela pourrait être fait dans une seule if()
. J'ai ajouté plusieurs if
ici pour des raisons de lisibilité.
Existe-t-il un moyen de simplifier les instructions if
ci-dessus et d'avoir une classe utilitaire simple qui renvoie la valeur de Boolean source
Si le parent s'oppose ou non à null?
Vous pouvez utiliser Java.util.Optional
de cette manière:
private boolean sourceWebsite(Registration registration) {
return Optional.of(registration)
.map(Registration::getApplication)
.map(Application::getMetadata)
.map(Metadata::getSource)
.map(source -> !source)
.orElse(Boolean.TRUE);
}
En bref, cela retournera true
si l'un des getters retourne null, et !Metadata.source
autrement.
Ce qui suit retournera vrai si l'un des est nul. Si toutes les valeurs ne sont pas nulles, elle renvoie !source
.
private boolean sourceWebsite(Registration registration) {
return registration.getApplication() == null
|| registration.getApplication().getMetadata() == null
|| registration.getApplication().getMetadata().getSource() == null
|| !registration.getApplication().getMetadata().getSource();
}
Mise à jour:
Si vous voulez que chaque getter ne soit pas appelé plus d'une fois, vous pouvez déclarer une variable pour chaque objet comme
private boolean sourceWebsite(Registration registration) {
Application application;
Metadata metadata;
Boolean source;
return (application = registration.getApplication()) == null
|| (metadata = application.getMetadata()) == null
|| (source = metadata.getSource()) == null
|| !source;
}
Une autre option que vous pouvez utiliser est un bloc try-catch. Si vous obtenez une exception de pointeur nul, retournez true.
private boolean sourceWebsite(Registration registration) {
try {
return !registration.getApplication().getMetadata().getSource();
}
catch (NullPointerException e) {
return true;
}
}