Umgang mit 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 NullPointerException
s zu vermeiden und Ihre Programme robuster zu machen. Überlegen Sie immer, ob eine Variable null
sein könnte, bevor Sie Methoden auf ihr aufrufen.