Hachim IDRISSI YASSINE, de ProfLibre.
Java Notions : Optional, ofNullable, get, orElse.
L'exception non vérifiée (au moment de la compilation) NullPointerException est l'une des exceptions qui peuvent nuire aux développeurs au moment d'exécution (Runtime) d'un programme
Java à cause d'un manque ou oubli d'initialisation d'un objet. Pour y remédier, un contrôle est rajouté à chaque fois pour vérifier si l'objet
est null ou pas.
Exemple avec l'opérateur ternaire :
(sobj != null) ? sobj : "";Java 8 a mis en place une fonctionnalité dédiée, il s'agit de la classe Optional qui offre une multitude de méthodes afin de gérer la nullité d'un objet
et éviter au maximum de tomber dans cette fameuse Exception NullPointerException.
En effet, un objet Optional peut être vide ou pas.
La classe Optional appartient au package java.util.
Lien JavaDoc :
https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
Aujourd'hui, nous allons voir quelques méthodes utiles de cette classe avec des cas pratiques pour mieux comprendre.
La méthode Optional.ofNullable() permet de créer un objet Optional qui peut contenir une valeur ou qu'il soit null (vide),
ceci évite le programme de tomber dans l'exception NullPointerException.
Syntaxe :
Optional<String> optionalValeur = Optional.ofNullable(uneValeur);La méthode get() permet simplement d'afficher la valeur contenue dans l'objet Optional,
avec un risque de déclencher l'exception NoSuchElementException si l'objet Optional est vide.
Syntaxe :
String resultat = optionalString.get();La méthode orElse() retourne la valeur de l'objet Optional, qu'elle soit la valeur qu'il encapsulee ou une valeur par défaut que cette méthode prend en paramètre.
Syntaxe :
String resultat = optionalString.orElse("Valeur_Par_Defaut");Exemple :
Optional<String> optionalValeur = Optional.ofNullable(uneValeur).orElse("Valeur_Par_Defaut");import java.util.Optional;
public class Personne {
public Personne() {
}
public Personne(String nom, String prenom, String ville) {
this.nom = nom;
this.prenom = prenom;
this.ville = ville;
}
private String nom;
private String prenom;
private String ville;
public String getNom() {
return nom != null ? nom : "Nom_Par_Defaut";
}
public void setNom(String nom) {
this.nom = nom;
}
public Optional<String> getPrenom() {
return Optional.ofNullable(prenom);
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getVille() {
return Optional.ofNullable(ville).orElse("Ville_Par_Defaut");
}
public void setVille(String ville) {
this.ville = ville;
}
}
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Personne p = new Personne();
System.out.println("Taille Nom : " + p.getNom().length());
System.out.println("Taille Prenom : " + p.getPrenom().orElse("Prenom_Par_Defaut").length());
System.out.println("Taille Ville : " + p.getVille().length());
}
}Quelques conseils et bonnes pratiques :
1- Pensez toujours à initialiser vos objets en Java.
2- N'utilisez pas Optional quand vous êtes sûr que l'objet ne sera jamais null, car à force de l'utiliser fréquemment dans le code, cela peut impacter la performance.
3- Préférez Optional dans les méthodes (pas en tant que paramètre) que dans les attributs de classe.
4- Préférez orElse() à get().
5- Utilisez ofNullable avec orElse, cela permet à la fois d'éviter l'exception NullPointerException et en même temps d'initialiser l'objet avec une valeur par défaut s'il est null.
Vous seul vous pouvez voir vos notes.

