Nachdem ich Java 8 jetzt seit mehr als 6 Monaten verwende, bin ich ziemlich zufrieden mit den neuen API-Änderungen. Ein Bereich, in dem ich immer noch nicht sicher bin, ist der Zeitpunkt der Verwendung Optional
. Ich scheine zwischen dem Wunsch, es überall zu verwenden, wo etwas sein mag null
, und nirgendwo hin und her zu schwingen .
Es scheint viele Situationen zu geben, in denen ich es verwenden könnte, und ich bin mir nie sicher, ob es Vorteile bringt (Lesbarkeit / Nullsicherheit) oder nur zusätzlichen Aufwand verursacht.
Ich habe also ein paar Beispiele und würde mich für die Gedanken der Community interessieren, ob dies von Optional
Vorteil ist.
1 - Als Rückgabetyp für öffentliche Methoden, wenn die Methode Folgendes zurückgeben könnte null
:
public Optional<Foo> findFoo(String id);
2 - Als Methodenparameter, wenn der Parameter sein kann null
:
public Foo doSomething(String id, Optional<Bar> barOptional);
3 - Als optionales Mitglied einer Bohne:
public class Book {
private List<Pages> pages;
private Optional<Index> index;
}
4 - In Collections
:
Im Allgemeinen denke ich nicht:
List<Optional<Foo>>
fügt etwas hinzu - zumal man damit Werte usw. filter()
entfernen kann null
, aber gibt es Optional
in Sammlungen gute Verwendungsmöglichkeiten ?
Irgendwelche Fälle, die ich verpasst habe?
.filter(Optional::absent)
"Nullwerte"
getOrDefault()
?
Map<Character, String>
. Wenn es keinen Ersatz gibt, kann ich dies verwenden :Optional.ofNullable(map.get(c)).orElse(String.valueOf(c))
. Beachten Sie auch, dass Optional aus Guava gestohlen wurde und eine viel schönere Syntax hat:Optional.fromNullable(map.get(c)).or(String.valueOf(c));