Behandlung von Null-Maps
In den vorherigen Schritten haben wir mit Maps gearbeitet, die entweder leer waren oder Elemente enthielten. Es ist jedoch wichtig zu berücksichtigen, was passiert, wenn eine Map-Variable null ist. Ein null-Verweis bedeutet, dass die Variable auf kein Objekt im Speicher zeigt. Wenn Sie versuchen, eine Methode wie isEmpty() oder size() auf einer null-Map aufzurufen, führt dies zu einer NullPointerException, einem häufigen Fehler in Java.
In diesem Schritt lernen wir, wie man potenzielle null-Map-Verweise sicher behandelt, bevor man versucht, ihre Leerheit oder Größe zu prüfen.
Öffnen Sie erneut die MapCheck.java-Datei im WebIDE-Editor.
Fügen wir Code hinzu, um eine null-Map zu demonstrieren und zu behandeln. Ändern Sie die main-Methode wie folgt:
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);
}
}
Hier ist, was wir hinzugefügt haben:
Map<String, Integer> nullMap = null;: Dies deklariert eine Map-Variable und setzt sie explizit auf null.
if (nullMap == null) { ... }: Dies ist der entscheidende Teil für den Umgang mit null. Wir prüfen, ob die nullMap-Variable null ist, bevor wir versuchen, irgendeine Methode auf ihr aufzurufen. Wenn sie null ist, geben wir eine Nachricht aus. Wenn sie nicht null wäre, würde der else-Block ausgeführt werden, und wir könnten sicher isEmpty() und size() aufrufen.
boolean isNullMapEmpty = (nullMap == null || nullMap.isEmpty());: Dies ist ein gängiges Muster, um zu prüfen, ob eine Map effektiv "leer" ist, was auch den Fall umfasst, dass der Map-Verweis selbst null ist. Der || (ODER)-Operator bedeutet, dass wenn nullMap == null wahr ist, der gesamte Ausdruck wahr ist und nullMap.isEmpty() gar nicht ausgewertet wird, wodurch die NullPointerException vermieden wird.
int nullMapSize = (nullMap == null) ? 0 : nullMap.size();: Dies verwendet den ternären Operator (? :), um die Größe sicher zu erhalten. Wenn nullMap null ist, ergibt der Ausdruck 0. Andernfalls ergibt er nullMap.size().
Speichern Sie die MapCheck.java-Datei (Strg+S oder Cmd+S).
Kompilieren Sie den geänderten Code im Terminal:
javac MapCheck.java
Führen Sie das Programm aus:
java MapCheck
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
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
Beachten Sie, dass die Zeilen im else-Block für nullMap nicht ausgeführt wurden und dass wir erfolgreich geprüft haben, ob die nullMap null war und ihre Größe (wobei null als Größe 0 behandelt wird) erhalten haben, ohne einen Fehler zu verursachen.
Der Umgang mit null-Verweisen ist in Java sehr wichtig, um NullPointerExceptions zu vermeiden und Ihre Programme robuster zu machen. Überlegen Sie immer, ob eine Variable null sein könnte, bevor Sie Methoden auf ihr aufrufen.