Une bonne raison de l'utiliser est qu'il rend vos nulls très significatifs. Au lieu de renvoyer un null qui pourrait signifier beaucoup de choses (comme une erreur, un échec, ou vide, etc.), vous pouvez mettre un «nom» à votre null. Regardez cet exemple:
définissons un POJO de base:
class PersonDetails {
String person;
String comments;
public PersonDetails(String person, String comments) {
this.person = person;
this.comments = comments;
}
public String getPerson() {
return person;
}
public String getComments() {
return comments;
}
}
Utilisons maintenant ce simple POJO:
public Optional<PersonDetails> getPersonDetailstWithOptional () {
PersonDetails details = null; /*details of the person are empty but to the caller this is meaningless,
lets make the return value more meaningful*/
if (details == null) {
//return an absent here, caller can check for absent to signify details are not present
return Optional.absent();
} else {
//else return the details wrapped in a guava 'optional'
return Optional.of(details);
}
}
Évitons maintenant d'utiliser null et faisons nos vérifications avec Optionnel pour que ce soit significatif
public void checkUsingOptional () {
Optional<PersonDetails> details = getPersonDetailstWithOptional();
/*below condition checks if persons details are present (notice we dont check if person details are null,
we use something more meaningful. Guava optional forces this with the implementation)*/
if (details.isPresent()) {
PersonDetails details = details.get();
// proceed with further processing
logger.info(details);
} else {
// do nothing
logger.info("object was null");
}
assertFalse(details.isPresent());
}
ainsi à la fin c'est un moyen de rendre les nulls significatifs, et moins d'ambiguïté.