Heim  >  Artikel  >  Java  >  Wie kann mir Optional in Java 8 dabei helfen, NullPointerExceptions in komplexen Getter-Ketten zu vermeiden?

Wie kann mir Optional in Java 8 dabei helfen, NullPointerExceptions in komplexen Getter-Ketten zu vermeiden?

Susan Sarandon
Susan SarandonOriginal
2024-10-25 10:03:02911Durchsuche

How can Optional in Java 8 help me avoid NullPointerExceptions in complex getter chains?

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 zurück, sodass Sie sicher mit dem Türobjekt interagieren können, ohne sich Sorgen um Nullreferenzen machen zu müssen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn