Maîtriser Java 8 Optional : Guide pratique pour un code sans null
Optional est un objet conteneur utilisé pour encapsuler des objets non-null. Il représente l'absence de valeur au lieu d'utiliser null. Cette classe fournit diverses méthodes utilitaires pour gérer les valeurs comme « présentes » ou « absentes » sans vérifications explicites de nullité. Introduite en Java 8, elle s'inspire de l'Optional de Guava.
Déclaration de la classe
Voici la déclaration de la classe java.util.Optional<T> :
public final class Optional<T> extends Object
Méthodes principales
| N° | Méthode & Description |
|---|---|
| 1 | static <T> Optional<T> empty() Retourne une instance Optional vide. |
| 2 | boolean equals(Object obj) Indique si un autre objet est « égal à » cet Optional. |
| 3 | Optional<T> filter(Predicate<? super T> predicate) Si une valeur est présente et correspond au prédicat, retourne un Optional la décrivant, sinon un Optional vide. |
| 4 | <U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) Si une valeur est présente, applique la fonction de mappage retournant un Optional, sinon retourne un Optional vide. |
| 5 | T get() Retourne la valeur si présente, sinon lève |
| 6 | int hashCode() Retourne le code de hachage de la valeur présente, ou 0 si absente. |
| 7 | void ifPresent(Consumer<? super T> consumer) Si une valeur est présente, invoque le consumer avec cette valeur, sinon ne fait rien. |
| 8 | boolean isPresent() Retourne |
| 9 | <U> Optional<U> map(Function<? super T, ? extends U> mapper) Si une valeur est présente, applique la fonction de mappage et retourne un Optional du résultat si non-null. |
| 10 | static <T> Optional<T> of(T value) Retourne un Optional avec la valeur non-null spécifiée. |
| 11 | static <T> Optional<T> ofNullable(T value) Retourne un Optional décrivant la valeur si non-null, sinon un Optional vide. |
| 12 | T orElse(T other) Retourne la valeur si présente, sinon retourne |
| 13 | T orElseGet(Supplier<? extends T> other) Retourne la valeur si présente, sinon invoque |
| 14 | <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) Retourne la valeur contenue si présente, sinon lève une exception créée par le fournisseur. |
| 15 | String toString() Retourne une représentation textuelle non-vide pour le débogage. |
Cette classe hérite des méthodes de java.lang.Object.
Exemple pratique
Créez le programme Java suivant dans un éditeur de votre choix (ex: C:\JAVA).
Java8Tester.java
import java.util.Optional;
public class Java8Tester {
public static void main(String args[]) {
Java8Tester java8Tester = new Java8Tester();
Integer value1 = null;
Integer value2 = new Integer(10);
// Optional.ofNullable - autorise un paramètre null
Optional<Integer> a = Optional.ofNullable(value1);
// Optional.of - lève NullPointerException si le paramètre est null
Optional<Integer> b = Optional.of(value2);
System.out.println(java8Tester.sum(a, b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b) {
// Vérifie la présence d'une valeur
System.out.println("Premier paramètre présent : " + a.isPresent());
System.out.println("Second paramètre présent : " + b.isPresent());
// orElse - retourne la valeur ou une valeur par défaut
Integer value1 = a.orElse(new Integer(0));
// get - récupère la valeur (doit être présente)
Integer value2 = b.get();
return value1 + value2;
}
}
Vérification du résultat
Compilez avec javac :
C:\JAVA>javac Java8Tester.java
Exécutez :
C:\JAVA>java Java8Tester
Sortie attendue :
Premier paramètre présent : false Second paramètre présent : true 10
Java
- Comprendre le mot-clé final en Java : variables, méthodes et classes
- L'opérateur instanceof en Java : guide complet
- Comprendre les classes imbriquées statiques en Java : utilisation, différences et exemples
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Le pattern Singleton en Java expliqué : implémentation et utilisation sûre
- Maîtriser la réflexion Java : inspection des classes, méthodes et champs à l'exécution
- Maîtriser Java ObjectOutputStream : Sérialisation, méthodes et exemples pratiques
- Maîtriser les génériques Java : Construire du code réutilisable et type-safe
- Maîtriser les opérations sur les fichiers Java avec java.io – Création, lecture, écriture et suppression