Gewährleistung der Nullsicherheit in Ketten von Getter-Aufrufen
Um sich vor NullPointerExceptions in komplexen Ketten von Getter-Aufrufen zu schützen, umfasst ein gängiger Ansatz explizite Nullprüfungen auf jeder Ebene, wie im bereitgestellten Codeausschnitt veranschaulicht.
Dieser Ansatz kann jedoch mühsam und ausführlich werden, insbesondere in Szenarien mit zahlreichen Getter-Aufrufen. Um dieses Problem zu lösen, hat Java 8 den Typ „Optional“ eingeführt, der Nullwerte elegant verwaltet und die Codestruktur vereinfacht.
Optional zum Behandeln von Nullen verwenden
Durch die Verwendung von Optional können Sie dies tun Nullen in Getter-Ketten nahtlos verarbeiten, ohne das Demeter-Gesetz zu verletzen. Optional können Sie mehrere Kartenoperationen verketten, die die Getter-Aufrufe effektiv ausführen. Nullprüfungen werden in diesem Rahmen automatisch durchgeführt.
Betrachten Sie das folgende Beispiel, in dem Objekte nicht initialisiert werden:
<code class="java">System.out.println("----- Not Initialized! -----"); Optional.ofNullable(new Outer()) .map(out -> out.getNested()) .map(nest -> nest.getInner()) .map(in -> in.getFoo()) .ifPresent(foo -> System.out.println("foo: " + foo)); //no print</code>
In diesem Fall wird keine Ausgabe generiert, da währenddessen Nullwerte angetroffen werden Der Getter ruft auf.
Nun initialisieren wir die Objekte:
<code class="java">System.out.println("----- Let's Initialize! -----"); Optional.ofNullable(new OuterInit()) .map(out -> out.getNestedInit()) .map(nest -> nest.getInnerInit()) .map(in -> in.getFoo()) .ifPresent(foo -> System.out.println("foo: " + foo)); //will print!</code>
Dieses Mal gibt das Programm erfolgreich „foo: yeah!“ aus und demonstriert damit, wie Optional mit Nullwerten elegant umgeht.
Optionale Anwendung auf Ihre Getter-Kette
Für Ihre spezifische Getter-Kette mit house.getFloor(0).getWall(WEST).getDoor().getDoorknob() können Sie dies tun Verwenden Sie Optional auf folgende Weise:
<code class="java">Optional.ofNullable(house) .map(house -> house.getFloor(0)) .map(floorZero -> floorZero.getWall(WEST)) .map(wallWest -> wallWest.getDoor()) .map(door -> wallWest.getDoor())</code>
Dieses Code-Snippet gibt ein optionales
Das obige ist der detaillierte Inhalt vonWie kann mir Optional in Java 8 dabei helfen, NullPointerExceptions in komplexen Getter-Ketten zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!