Gérer les Maps nulles
Dans les étapes précédentes, nous avons travaillé avec des cartes qui étaient soit vides, soit contenaient des éléments. Cependant, il est important de considérer ce qui se passe si une variable de type Map est null. Une référence null signifie que la variable ne pointe vers aucun objet en mémoire. Tenter d'appeler une méthode comme isEmpty() ou size() sur une carte null entraînera une NullPointerException, qui est une erreur courante en Java.
Dans cette étape, nous apprendrons à gérer en toute sécurité les références potentielles de cartes null avant d'essayer de vérifier leur vacuité ou leur taille.
Ouvrez à nouveau le fichier MapCheck.java dans l'éditeur de l'IDE Web.
Ajoutons du code pour démontrer et gérer une carte null. Modifiez la méthode main pour inclure ce qui suit :
import java.util.HashMap;
import java.util.Map;
public class MapCheck {
public static void main(String[] args) {
// Create an empty Map
Map<String, Integer> emptyMap = new HashMap<>();
// Check the size of the empty map using size()
int emptySize = emptyMap.size();
// Print the result
System.out.println("Size of the empty map: " + emptySize);
// Create a non-empty Map
Map<String, Integer> nonEmptyMap = new HashMap<>();
nonEmptyMap.put("one", 1);
nonEmptyMap.put("two", 2);
nonEmptyMap.put("three", 3); // Add one more element
// Check the size of the non-empty map
int nonEmptySize = nonEmptyMap.size();
// Print the result
System.out.println("Size of the non-empty map: " + nonEmptySize);
// Declare a Map variable but don't initialize it (it will be null)
Map<String, Integer> nullMap = null;
// --- Handling the null map ---
// Check if the map is null before calling methods
if (nullMap == null) {
System.out.println("The nullMap is null.");
} else {
// This block will not be executed for nullMap
System.out.println("Is the nullMap empty? " + nullMap.isEmpty());
System.out.println("Size of the nullMap: " + nullMap.size());
}
// A safer way to check if a map is empty (handles null)
boolean isNullMapEmpty = (nullMap == null || nullMap.isEmpty());
System.out.println("Is the nullMap considered empty (including null)? " + isNullMapEmpty);
// A safer way to get the size (handles null)
int nullMapSize = (nullMap == null) ? 0 : nullMap.size();
System.out.println("Size of the nullMap (handling null): " + nullMapSize);
}
}
Voici ce que nous avons ajouté :
Map<String, Integer> nullMap = null; : Cela déclare une variable de type Map mais l'initialise explicitement à null.
if (nullMap == null) { ... } : C'est la partie cruciale pour gérer les valeurs null. Nous vérifions si la variable nullMap est null avant d'essayer d'appeler des méthodes sur elle. Si elle est null, nous affichons un message. Si elle n'était pas null, le bloc else serait exécuté, et nous pourrions appeler en toute sécurité isEmpty() et size().
boolean isNullMapEmpty = (nullMap == null || nullMap.isEmpty()); : C'est un modèle courant pour vérifier si une carte est effectivement "vide", ce qui inclut le cas où la référence de la carte elle-même est null. L'opérateur || (OU) signifie que si nullMap == null est vrai, toute l'expression est vraie, et nullMap.isEmpty() n'est même pas évalué, évitant ainsi la NullPointerException.
int nullMapSize = (nullMap == null) ? 0 : nullMap.size(); : Cela utilise l'opérateur ternaire (? :) pour obtenir en toute sécurité la taille. Si nullMap est null, l'expression s'évalue à 0. Sinon, elle s'évalue à nullMap.size().
Enregistrez le fichier MapCheck.java (Ctrl+S ou Cmd+S).
Compilez le code modifié dans le terminal :
javac MapCheck.java
Exécutez le programme :
java MapCheck
Vous devriez voir une sortie similaire à celle-ci :
Size of the empty map: 0
Size of the non-empty map: 3
The nullMap is null.
Is the nullMap considered empty (including null)? true
Size of the nullMap (handling null): 0
Notez que les lignes à l'intérieur du bloc else pour nullMap n'ont pas été exécutées, et nous avons réussi à vérifier si nullMap était null et à obtenir sa taille (en considérant null comme ayant une taille de 0) sans causer d'erreur.
Gérer les références null est très important en Java pour éviter les NullPointerException et rendre vos programmes plus robustes. Pensez toujours à vérifier si une variable peut être null avant d'appeler des méthodes sur elle.