Introduction
Dans ce laboratoire (lab), vous apprendrez les techniques essentielles pour vérifier si un objet est nul en Java, une compétence fondamentale pour éviter les erreurs de NullPointerException. Nous commencerons par explorer la méthode la plus basique : utiliser l'opérateur d'égalité (==) pour comparer directement une variable de référence avec null.
En nous appuyant sur cela, nous examinerons ensuite comment combiner les vérifications de nullité avec les vérifications de type pour garantir à la fois l'existence et le bon type d'un objet. Enfin, nous plongerons dans l'utilisation de la classe Optional, une fonctionnalité moderne de Java qui offre une manière plus idiomatique et plus sûre de gérer les valeurs potentiellement nulles, favorisant ainsi un code plus robuste et plus lisible.
Utiliser l'opérateur d'égalité pour la vérification de nullité
Dans cette étape, nous explorerons l'une des méthodes les plus basiques pour vérifier la nullité (null) en Java : l'utilisation de l'opérateur d'égalité (==). Comprendre comment gérer la nullité est crucial en programmation Java pour éviter les erreurs.
En Java, null est une valeur spéciale qui indique qu'une variable de référence ne pointe vers aucun objet. Imaginez une variable comme une boîte et un objet comme quelque chose que vous mettez dans la boîte. Si la boîte est vide, la variable est null. Tenter d'utiliser une référence null (comme essayer d'utiliser quelque chose dans une boîte vide) entraîne souvent une NullPointerException, une erreur courante et frustrante pour les débutants.
Créons un simple programme Java pour démontrer comment vérifier la nullité à l'aide de l'opérateur d'égalité.
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE s'il n'est pas déjà ouvert.Remplacez tout le contenu du fichier par le code suivant :
public class HelloJava { public static void main(String[] args) { String message = null; // Déclaration d'une variable String et initialisation à null // Vérification si la variable message est null en utilisant l'opérateur d'égalité if (message == null) { System.out.println("The message is null."); } else { System.out.println("The message is: " + message); } message = "Hello, World!"; // Attribution d'un objet String à la variable // Nouvelle vérification après avoir attribué une valeur if (message == null) { System.out.println("The message is null."); } else { System.out.println("The message is: " + message); } } }Dans ce code :
- Nous déclarons une variable
Stringnomméemessageet l'initialisons ànull. - Nous utilisons une instruction
ifavec l'opérateur d'égalité (==) pour vérifier simessageestnull. - Si
message == nullest vrai, nous affichons "The message is null.". - Si c'est faux, nous affichons le message lui-même.
- Nous attribuons ensuite la chaîne de caractères "Hello, World!" à la variable
message. - Nous effectuons à nouveau la vérification de nullité pour voir la différence de sortie.
- Nous déclarons une variable
Enregistrez le fichier (Ctrl+S ou Cmd+S).
Compilez le programme en utilisant la commande
javacdans le terminal :javac HelloJava.javaS'il n'y a pas d'erreurs, la compilation est réussie.
Exécutez le programme compilé en utilisant la commande
java:java HelloJavaVous devriez voir la sortie suivante :
The message is null. The message is: Hello, World!Cette sortie confirme que notre vérification de nullité avec
==a fonctionné correctement. Lorsquemessageétaitnull, la première conditionifétait vraie. Après avoir attribué une valeur, la deuxième conditionifétait fausse et le blocelsea été exécuté.
L'utilisation de l'opérateur d'égalité (==) est la méthode standard et recommandée pour vérifier si une variable de référence est null en Java. Elle est simple, claire et efficace.
Combiner les vérifications de nullité et de type
Dans cette étape, nous apprendrons à combiner la vérification de nullité (null) avec la vérification du type d'un objet. C'est un scénario courant lorsque vous recevez un objet et que vous devez vous assurer qu'il n'est pas null et qu'il est d'un type spécifique avant de pouvoir l'utiliser.
Java fournit l'opérateur instanceof pour vérifier si un objet est une instance d'une classe particulière ou implémente une interface spécifique. Nous pouvons combiner cela avec notre vérification de nullité en utilisant l'opérateur logique ET (&&).
Modifions notre programme HelloJava.java pour démontrer cela.
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE.Remplacez le code existant par le suivant :
public class HelloJava { public static void main(String[] args) { Object myObject = "This is a String"; // Déclaration d'une variable de type Object // Vérification si myObject n'est pas null ET est une instance de String if (myObject != null && myObject instanceof String) { String message = (String) myObject; // Conversion de l'objet en String System.out.println("The object is a non-null String: " + message); } else { System.out.println("The object is null or not a String."); } myObject = null; // Affectation de null à l'objet // Nouvelle vérification après avoir affecté null if (myObject != null && myObject instanceof String) { String message = (String) myObject; System.out.println("The object is a non-null String: " + message); } else { System.out.println("The object is null or not a String."); } myObject = 123; // Affectation d'un entier à l'objet // Nouvelle vérification après avoir affecté un entier if (myObject != null && myObject instanceof String) { String message = (String) myObject; System.out.println("The object is a non-null String: " + message); } else { System.out.println("The object is null or not a String."); } } }Dans ce code mis à jour :
- Nous déclarons une variable
myObjectde typeObject.Objectest la classe de base de toutes les classes en Java, donc elle peut contenir une référence à n'importe quel objet. - Nous affectons d'abord une
StringàmyObject. - La condition
ifmyObject != null && myObject instanceof Stringvérifie deux choses :myObject != null: La référence de l'objet n'est-elle pasnull?myObject instanceof String: L'objet est-il une instance de la classeString?
- L'opérateur
&&signifie que les deux conditions doivent être vraies pour que le code à l'intérieur du blocifs'exécute. - Si les deux sont vraies, nous convertissons
myObjectenStringen utilisant(String) myObjectet nous affichons un message. La conversion est nécessaire carmyObjectest déclaré commeObject, et nous devons indiquer au compilateur que nous savons qu'il s'agit en réalité d'uneStringpour pouvoir la traiter comme telle. - Si l'une des conditions est fausse (l'objet est
nullou n'est pas uneString), le blocelseest exécuté. - Nous testons ensuite la condition
ifavecmyObjectaffecté ànullpuis affecté à unInteger(qui n'est pas uneString).
- Nous déclarons une variable
Enregistrez le fichier.
Compilez le programme :
javac HelloJava.javaExécutez le programme :
java HelloJavaVous devriez voir la sortie suivante :
The object is a non-null String: This is a String The object is null or not a String. The object is null or not a String.Cette sortie montre que la condition
ifa correctement identifié quand l'objet était uneStringnon nulle et quand il était soitnullsoit pas uneString.
Combiner != null et instanceof est un modèle standard en Java lorsque vous avez besoin de travailler en toute sécurité avec des objets d'un type spécifique qui peuvent également être null.
Utiliser Optional pour gérer les valeurs nulles
Dans cette étape, nous allons explorer une approche plus moderne pour gérer les valeurs potentiellement nulles (null) en Java, introduite en Java 8 : la classe Optional. Optional est un objet conteneur qui peut contenir une valeur non nulle ou être vide. Il offre un moyen de représenter de manière plus explicite la présence ou l'absence d'une valeur, ce qui contribue à réduire le risque de NullPointerException.
L'utilisation de Optional incite à prendre en compte la possibilité d'une absence de valeur et à gérer ce cas de manière élégante, plutôt que de compter sur des vérifications de nullité réparties dans tout le code.
Modifions notre programme HelloJava.java pour utiliser Optional.
Ouvrez le fichier
HelloJava.javadans l'éditeur WebIDE.Remplacez le code existant par le suivant :
import java.util.Optional; public class HelloJava { public static void main(String[] args) { // Création d'un Optional contenant une valeur Optional<String> optionalMessageWithValue = Optional.of("Hello from Optional!"); // Création d'un Optional vide (représente null) Optional<String> optionalMessageWithoutValue = Optional.empty(); // Gestion de l'Optional contenant une valeur if (optionalMessageWithValue.isPresent()) { String message = optionalMessageWithValue.get(); // Récupération de la valeur si elle est présente System.out.println("Optional with value: " + message); } else { System.out.println("Optional with value is empty."); } // Gestion de l'Optional sans valeur if (optionalMessageWithoutValue.isPresent()) { String message = optionalMessageWithoutValue.get(); System.out.println("Optional without value: " + message); } else { System.out.println("Optional without value is empty."); } // Une manière plus concise de gérer l'Optional avec ifPresent optionalMessageWithValue.ifPresent(msg -> System.out.println("Using ifPresent: " + msg)); // Utilisation de orElse pour fournir une valeur par défaut si l'Optional est vide String messageOrDefault = optionalMessageWithoutValue.orElse("Default Message"); System.out.println("Using orElse: " + messageOrDefault); } }Dans ce code :
- Nous importons la classe
Optional. - Nous créons un
Optional<String>contenant une valeur en utilisantOptional.of(). Notez queOptional.of()lèvera uneNullPointerExceptionsi vous lui passeznull. Si la valeur peut êtrenull, utilisez plutôtOptional.ofNullable(). - Nous créons un
Optional<String>vide en utilisantOptional.empty(). - Nous utilisons
optionalMessageWithValue.isPresent()pour vérifier si l'Optionalcontient une valeur. Si c'est le cas, nous pouvons récupérer la valeur en utilisantoptionalMessageWithValue.get(). Attention : appelerget()sur unOptionalvide lèvera uneNoSuchElementException. - Nous montrons comment gérer de la même manière un
Optionalvide. - Nous présentons
ifPresent(), qui exécute une action donnée uniquement si une valeur est présente. C'est une manière plus propre d'exécuter une action sur la valeur si elle existe. - Nous présentons
orElse(), qui renvoie la valeur si elle est présente, sinon renvoie une valeur par défaut. Cela est utile pour fournir des valeurs de secours.
- Nous importons la classe
Enregistrez le fichier.
Compilez le programme :
javac HelloJava.javaExécutez le programme :
java HelloJavaVous devriez voir la sortie suivante :
Optional with value: Hello from Optional! Optional without value is empty. Using ifPresent: Hello from Optional! Using orElse: Default MessageCette sortie montre comment
Optionalpeut être utilisé pour gérer de manière plus explicite et plus sûre la présence ou l'absence de valeurs par rapport aux vérifications de nullité traditionnelles. Bien queOptionalne soit pas un remplacement pour toutes les vérifications de nullité, c'est un outil précieux pour concevoir des API et écrire du code où l'absence d'une valeur est un scénario valide et attendu.
Résumé
Dans ce laboratoire, nous avons appris les techniques fondamentales pour vérifier si un objet est null en Java. Nous avons commencé par explorer la méthode la plus basique : utiliser l'opérateur d'égalité (==) pour comparer directement une variable de référence avec null. Ce simple test est essentiel pour éviter les erreurs de NullPointerException.
Nous sommes ensuite passés à des scénarios plus avancés, bien que le contenu fourni ne détaille que le test d'égalité de base. Un laboratoire complet couvrirait probablement la combinaison de vérifications de nullité avec des vérifications de type et l'utilisation de la classe Optional, une fonctionnalité moderne de Java conçue pour gérer plus élégamment et de manière plus expressive les valeurs potentiellement nulles, favorisant ainsi un code plus propre et plus sûr.



