Heim >Java >javaLernprogramm >Wie man Null-Checks in Getter-Ketten ordnungsgemäß handhabt: Optional vs. Demeter-Gesetz?
Elegante Handhabung von Nullprüfungen in Ketten von Getter-Aufrufen
In der Softwareentwicklung kommt es häufig vor, dass Sie auf Situationen stoßen, in denen Sie Getter verketten müssen Aufrufe wie:
<code class="java">house.getFloor(0).getWall(WEST).getDoor().getDoorknob();</code>
Solche Ketten können jedoch anfällig für NullPointerExceptions sein, wenn eines der Objekte entlang der Kette null ist. Um dem vorzubeugen, greifen Entwickler oft auf langwierige If-Null-Prüfungen zurück, was zu unnötiger Komplexität und Codeduplizierung führt.
Alternative Ansätze
Es gibt zwar keine Out-of- the-box-Dienstprogrammklasse in Java, um dieses Problem zu lösen, gibt es elegante Alternativen:
Gesetz der Demeter-Verletzung
Wie von @Erwin Bolwidt vorgeschlagen, können Sie das brechen Law of Demeter (LoD) und greifen Sie direkt auf die verschachtelten Eigenschaften zu:
<code class="java">if (house != null && house.floors != null && house.floors[0] != null && house.floors[0].walls != null && house.floors[0].walls[WEST] != null) ...</code>
Von diesem Ansatz wird abgeraten, da er das Kapselungsprinzip verletzt und die Codekomplexität erhöht.
Optional mit Java 8
Java 8 hat den optionalen Typ eingeführt, der Ihnen den eleganteren Umgang mit Nullen ermöglicht. Sie können jeden Getter-Aufruf in ein optionales Paket einbinden:
<code class="java">Optional.ofNullable(house) .map(house -> house.getFloor(0)) .map(floor -> floor.getWall(WEST)) .map(wall -> wall.getDoor()) .map(door -> door.getDoorknob());</code>
Dieser Ansatz macht explizite Nullprüfungen überflüssig und bietet eine prägnantere und aussagekräftigere Syntax.
Fazit
Während es kein integriertes Dienstprogramm zum Überprüfen von Nullen in Getter-Ketten gibt, bieten der optionale Typ und die Verletzung des Gesetzes von Demeter flexible und kontextabhängige Lösungen. Die Wahl des besten Ansatzes hängt vom spezifischen Szenario und den Designprinzipien des Projekts ab.
Das obige ist der detaillierte Inhalt vonWie man Null-Checks in Getter-Ketten ordnungsgemäß handhabt: Optional vs. Demeter-Gesetz?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!