Optional
Motivation
Die Tatsache, dass eine Referenz in Java auf ein Objekt zeigen kann oder null sein, macht die Programmierung für Anfänger schwierig. Aber auch Profis kämpfen mit der null-Referenz, die eine Quelle vieler Fehler sein kann. Der Erfinder dieser Referenz nennt sie rückblickend sein „billion-dollar mistake“.
Tony Hoare, 2009
Andere Programmiersprachen, z. B. Ruby, haben den Fehler nicht gemacht und kennen keine null-Referenz. In Ruby gibt es zwar nil, dies ist aber ein normales Objekt, mit Methoden und Eigenschaften.
Optional
In Java kann der Datentyp Optional kann verwendet werden, um die Fehleranfälligkeit in Java-Programmen zu reduzieren, indem es den Programmierer:innen ermöglicht, Fehler zu behandeln oder auszulösen, wenn ein Wert nicht vorhanden ist. Ein weiteres Beispiel ist die Rückgabe von Werten aus einer Methode, wo ein Ergebnis nicht immer garantiert werden kann. Anstatt Bei dem Rückgabetyp Die primitiven Datentypen nehmen in Java immer eine Sonderstellung ein. Wie bereits erläutert, kann man sie mithilfe der Wrapper-Typen in Objekte verwandeln. Dies ist aber – wegen des ständigen Ein- und Auspackens – nicht effizient. Deswegen gibt es eine Reihe von speziellen Klassen, um Optional für primitive Datentypen Für die anderen Datentypen wird kein Optional angeboten, diese lassen sich aber alle problemlos in den drei vorhandenen speichern. Im Folgenden ein Beispiel für eine Klasse Die Verwendung von Optional Optional eine explizite Möglichkeit, um auszudrücken, dass ein Wert nicht vorhanden sein kann und ermöglicht dadurch eine klarere und sicherere Programmierung. </p> java.util.Optional bietet einen sicheren Ersatz für null
Optional.of(...)
null wird eine NullpointerException geworfenOptional.ofNullable(...) erzeugt ein neues Optional
null ist, wird ein Optional.empty() zurückgegebennull ist, wird ein Optional.of(...) zurückgegebenOptional.empty() erzeugt ein neues Optional, das leer ist
isPresent() prüft, ob ein Wert vorhanden istisEmpty() zeigt an, dass kein Wert vorhanden istget()
Optional ausNoSuchElementExceptionorElse(...) führt ein get()
null zurückzugeben, könnte man eine Optional-Instanz zurückgeben, um auszudrücken, dass das Ergebnis optional ist. Optional<Person> von getPartner() wird ein Typ-Parameter verwendet, weil Optional ein generischer Datentyp ist. Diese werden wir in einem späteren Kapitel betrachten. Hier muss die Information genügen, dass man durch das <Person> gestlegen kann, welchen Typ das Objekt hat, welches von Optional verwaltet wird. Optional einfach für die wichtigsten primitive Datentypen verwenden zu können.
OptionalInt: Daten vom Typ int, short, byte, char
of(int i)getAsInt()OptonalLong: Daten vom Typ long
of(long l)getAsLong()OptonalDouble: Daten vom Typ float und double
of(double d )getAsDouble()Person bei der das Alter optional angegeben werden kann. OptionalInt ermöglicht es uns, klar auszudrücken, dass das Alter optional ist und dass entsprechende Maßnahmen getroffen werden müssen, um mit dieser Möglichkeit umzugehen.