Sicheres Navigieren in Ketten von „Get“-Aufrufen mit Optional
Bei der Java-Programmierung kommt es häufig vor, dass man auf Ketten von „Get“-Aufrufen stößt. wie zum Beispiel das Folgende:
house.getFloor(0).getWall(WEST).getDoor().getDoorknob();
Um potenzielle NullPointerExceptions zu vermeiden, greifen Entwickler häufig auf ausführliche Nullprüfungen zurück:
if (house != null &&& house.getFloor(0) &&& house.getFloor(0).getWall(WEST) != null &&& house.getFloor(0).getWall(WEST).getDoor() != null) ...
Dieser Ansatz wird bei längeren Aufrufketten noch unhandlicher. Gibt es eine elegantere Lösung?
Ja, mit der Einführung des optionalen Typs in Java 8 ist die Handhabung von Nullen in Ketten von Gets erheblich einfacher geworden.
Optional für die Nullbehandlung verwenden
Optional ist eine Wrapper-Klasse, die einen optionalen Wert darstellt. Es kann entweder einen Wert ungleich Null enthalten oder leer sein.
Um Optional für die Nullbehandlung in Ketten von Abrufen zu verwenden, können wir seine Verkettungsfunktionen mit der Methode map() nutzen.
Bedenken Sie Das folgende Beispiel:
Optional.ofNullable(house) .map(house -> house.getFloor(0)) .map(floorZero -> floorZero.getWall(WEST)) .map(wallWest -> wallWest.getDoor()) .map(door -> wallWest.getDoor());
Dieser Code erstellt eine Kette optionaler Objekte, die jeweils das Ergebnis des entsprechenden Get-Aufrufs darstellen.
Vorteile der Verwendung von Optional
Die Verwendung von Optional bietet mehrere Vorteile:
Fazit
Wenn Sie es nicht vermeiden können, das Gesetz von Demeter zu brechen, Die Verwendung von Optional ist ein dringend empfohlener Ansatz zum sicheren Navigieren in Ketten von „get“-Aufrufen. Es bietet eine elegante und effiziente Möglichkeit, mit Nullen umzugehen und stellt die Robustheit und Zuverlässigkeit Ihres Codes sicher.
Das obige ist der detaillierte Inhalt vonWie kann der optionale Typ von Java die Handhabung von Nullen in Ketten von „Get'-Aufrufen vereinfachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!