
Découvrez les avantages d'intégrer l'optionnel en Java 8 pour éviter les NullPointerException. Simplifiez votre code et améliorez la lisibilité avec notre guide.
La fonctionnalité de Optional pour éviter les NPE.
JAVA avait comme idée originale de supprimer la notion de pointeur (du moins de la masquer) afin de faciliter la vie des développeurs. Néanmoins pour des raisons de simplicité, la « valeur » null a été laissé. Et « à cause » de cette valeur null, a été créé la fameuse exception NullPointerException qui est l’erreur à la fois la plus connue et la plus détestable car généralement on ne peut plus rien y faire…
Un optional est une classe qui « wrappe » l’objet dont on a réellement besoin. L’optional encapsule dont l’objet métier et indique directement que cet objet est « facultatif » c’est à dire qu’il peut être présent ou non.

Le cas le plus évident est dans les classes métiers, celles qui portent les valeurs. Prenons un exemple d’une commande. Dans une commande, il existe un objet client qui stocke les informations du client. Mais lors du processus de commande, c’est objet client n’existe peut-être pas encore. Imaginons que nous soyons dans une commande web et que le client n’est pas encore loggué. Avant les optionals, il était donc nécessaire de tester la nullité de l’objet client dans la classe commande presque à chaque utilisation, ce qui est très pénible. De plus, un développeur qui reprend le classe commande plus loin dans l’application, n’a aucun moyen de savoir (hormis la documentation) si le client va être présent dans la classe Commande. Pour pallier à ce problème, l’utilisation de la classe Wrapper Optional répond à ce problème de la manière suivante:
Dans la classe Commande, au lieu de stocker l’objet Client, on stocke un Optional. Ceci indique directement que l’objet client peut être présent dans la classe ou peut être pas. L’avantage c’est qu’en terme de visibilité, il devient facile de le comprendre. Sémantiquement c’est un plus indiscutable.
Premier exemple, ici on renseigne dans la classe commande un client qui est optional
public class Commande{
private Optional<
Client> client = Optional.empty();
}
Il existe plusieurs manière de créer des optionals:
Optional<
DomainObject> opt = Optional.empty();
Optional<
DomainObject> opt = Optional.of(objet);
Optional<
DomainObject> opt = Optional.ofNullable(objet);
Pour récupérer la valeur, on peut utiliser la méthode map avec une référence de méthode. L’avantage des optionals, est l’utilisation des methodes orElse ou orElseGet. Méthode orElse(T) permet de créer un objet si l’objet n’existe pas, comme une valeur par défaut sur un String.
La méthode orElseGet(Supplier) prend une lambda pour créer la valeur manquante. Ainsi, il n’est plus possible de faire des NPE.
opt.map().orElse("Valeur par défaut")
On peut aussi récupérer la valeur par get() mais une erreur du type NoSuchElementException peut se produire si la valeur n’est pas présente.
<table>
<tr>
<th>
Méthode
</th>
<th>
Description
</th>
</tr>
<tr>
<td>
orElse
</td>
<td>
Fourni une valeur par défaut
</td>
</tr>
<tr>
<td>
orElseGet<Supplier>
</td>
<td>
Supplier appelé pour générer une valeur<br /> si besoin
</td>
</tr>
<tr>
<td>
ifPresent(Consumer<? Super T>)
</td>
<td>
Déclenche la consommation de l’élément<br /> si présent avec le lambda.
</td>
</tr>
</table>
Ainsi on se rend compte que les optionals permettent d’améliorer la lecture du code JAVA. Néanmoins un reproche qui peut lui être fait est que les optionals sont assez verbeux à utiliser. Personnellement même si ils répondent au besoin, j’aurai préférer l’utilisation d’un opérateur type ? qui aurait été plus facile à utiliser.
Tendances IT 2026 : comme chaque année au mois de décembre, la team AXOPEN s’est réunie autour du podcast pour analyser les grandes tendances techs et les enjeux IT qui façonneront 2026. De l’intelligence artificielle à la cybersécurité, en passant par le cloud, la souveraineté numérique et l’évolution des usages, les sujets ne manquent pas !
Si vous avez déjà passé des heures à attendre que votre projet se "bundle" avec Webpack, vous savez à quel point cela peut freiner votre productivité. Bonne nouvelle : Vite.js est arrivé pour changer la donne ! Conçu pour optimiser les temps de développement et moderniser l'approche du bundling, Vite révolutionne la façon dont nous travaillons avec des des outils comme React, Vue ou encore Angular. Plus rapide, plus flexible et conçu pour tirer parti des modules ES natifs, Vite promet de mettre Webpack à la retraite.
Le premier élément de la sécurisation d’un environnement est la présence d’un firewall entre Internet, et votre environnement. Cet élément doit être le seul point d’entrée de votre environnement, protégeant ainsi toutes vos machines d’attaques possibles