Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Java : apprendre à utiliser la classe Optional<T> pour éviter d'utiliser explicitement null
Par Gugelhupf

Le , par Gugelhupf

0PARTAGES

La classe Optional, apparue avec Java 8, sert de syntaxe alternative à une utilisation explicite du mot-clé null. En effet, l’utilisation du mot-clé null est souvent contestée, car elle n’apporte pas forcément une bonne lisibilité à la lecture du code.

Voici un exemple d'utilisation d'Optional :


Exemple sans Optional Exemple avec Optional
Code Java : Sélectionner tout
1
2
3
if (myObject != null) { 
    myObject.myMethod(); 
}
Code Java : Sélectionner tout
1
2
3
if (myObjectOptional.isPresent()) { 
    myObjectOptional.get().myMethod(); 
}

Nous utilisons Optional pour vérifier la présence d'un élément facultatif (d'un élément qui peut ne pas exister) avant de l'utiliser.

Mais qu'est-ce qu'un Optional ? Vous l'avez surement déjà vu avec l'utilisation des Stream introduit dans Java 8, Optional n'est ni plus ni moins un petit utilitaire qui fait office de container, c'est un objet qui contient votre instance.

Voici quelques exemples de création d'Optional<T> :


Exemple Description
Code Java : Sélectionner tout
1
2
3
4
5
public Optional<String> method(){ 
    String returnValue = null; 
    // Code 
    return Optional.ofNullable(returnValue); 
}
returnValue peut être null
Code Java : Sélectionner tout
1
2
3
4
5
public Optional<String> method(){ 
    String returnValue = null; 
    // Code 
    return Optional.of(returnValue); 
}
un NullPointerException sera lancé si returnValue vaut null.
Code Java : Sélectionner tout
1
2
3
public Optional<String> method(){ 
    return Optional.empty(); 
}
Pour instancier un Optional<T> vide
La classe Optional est à utiliser avec les retours de méthode, d’après Brian Goetz, créateur de cette classe (source) :
you probably should never use it for something that returns an array of results, or a list of results; instead return an empty array or list. You should almost never use it as a field of something or a method parameter.

N'utilisez pas optional sur votre retour de méthode si c'est un container (un tableau, une List ou Map), retournez un container vide.
N'utilisez pas optional pour vos attributs
N'utilisez pas optional pour vos paramètres de méthode

Chaque feature introduit dans un langage pousse généralement le développeur à l'utiliser un maximum, le risque est bien sûr d'en abuser. D'où la raison qui pousse Brian Goetz à indiquer qu'il ne faut pas utiliser Optional partout.

À noter aussi que si vous rencontrez un tel code :
Code Java : Sélectionner tout
1
2
3
4
5
if (myOptional != null) { 
    if (myOptional.isPresent()) { 
        // Code 
    } 
}
... c'est que la personne l'ayant codé n'a rien compris à l'utilisation d'Optional.

Une erreur dans cette actualité ? Signalez-le nous !