Getter verketten und NullPointerExceptions behandeln
Beim Durchführen einer Kette von Getter-Aufrufen zum Abrufen von Daten aus verschachtelten Objekten müssen Nullprüfungen durchgeführt werden um NullPointerExceptions zu vermeiden. Dies kann schnell ausführlich und unhandlich werden, wenn es um mehrere Objektebenen geht.
Verschachteln von If-Anweisungen
Ein gängiger Ansatz besteht darin, if-Anweisungen zu verschachteln und dabei jedes Objekt in zu überprüfen Kette für Null, bevor Sie fortfahren. Allerdings kann diese Methode unhandlich und schwer aufrechtzuerhalten sein.
Break Law of Demeter (LoD)
Dieser Ansatz verstößt gegen das Law of Demeter (LoD) , das besagt, dass Methoden andere Methoden nur für Objekte aufrufen sollten, auf die sie direkt verweisen. Durch den Zugriff auf Objekte außerhalb ihres unmittelbaren Kontexts verletzt diese Methode die Kapselung der beteiligten Klassen.
Verwenden von Optional (Java 8)
Glücklicherweise wurde in Java 8 die Klasse Optional eingeführt , was eine elegantere und typsicherere Möglichkeit bietet, Nullen in Getter-Ketten zu verarbeiten. Optional stellt einen möglicherweise Nullwert dar und stellt Methoden zum Zuordnen und Filtern des darin enthaltenen Werts bereit.
Getter mit Optional.ofNullable verketten
Um Getter mit Optional zu verketten, rufen Sie einfach auf Optional.ofNullable() für das erste Objekt in der Kette. Dadurch wird ein optionales Objekt erstellt, das den Wert oder Null darstellt. Sie können dann Map()-Operationen verketten, um Getter-Aufrufe auf den Wert anzuwenden, und Optional führt die Nullprüfungen automatisch durch.
Optional doorknob = Optional.ofNullable(house)
.map(house -> house.getFloor(0))
.map(floorZero -> floorZero.getWall(WEST))
.map(wallWest -> wallWest.getDoor())
.map(door -> door.getDoorknob());
Sicherheit und Kapselung
Dieser Ansatz vereinfacht nicht nur den Code, sondern gewährleistet auch die Typsicherheit. Die optionale Klasse löst eine Ausnahme aus, wenn Sie versuchen, auf den von ihr dargestellten Wert zuzugreifen, ohne vorher zu prüfen, ob er null ist. Darüber hinaus bleibt die Kapselung der beteiligten Klassen erhalten, da Sie nur direkt auf Methoden der Objekte zugreifen, auf die Sie verweisen.
Schlussfolgerung
Obwohl dies gelegentlich erforderlich sein kann Wenn Sie gegen die LoD verstoßen, wird generell empfohlen, beim Verketten von Gettern eine übermäßige Verschachtelung von if-Anweisungen zu vermeiden. Erwägen Sie stattdessen die Verwendung der optionalen Klasse, um Nullen eleganter und typsicherer zu behandeln.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3