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
ausNoSuchElementException
orElse(...)
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.