Ich habe here lesen, warum Optional.of()
sollte über Optional.ofNullable()
verwendet werden, aber die Antwort befriedigte mich nicht, so frage ich etwas anders:Gibt es einen wirklichen Grund, Optional.of() zu verwenden?
Wenn Sie sicher sind, dass Ihre Methode nicht null
zurückkehrt, warum sollte benutzen Sie überhaupt Optional
? Soweit ich weiß, besteht der mehr oder weniger einzige Zweck darin, den "Benutzer einer Methode" daran zu erinnern, dass er sich möglicherweise mit null
-Werten befassen muss. Wenn er sich nicht mit null
-Werten befassen muss, warum sollte er mit einer Optional
gestört werden?
Ich frage, weil ich vor kurzem meine Service-Schicht Optionals anstelle von Nullen (in bestimmten Situationen) zurückgegeben habe. Ich benutzte Optional.of()
und war sehr verwirrt, als es einen NullPointer warf.
Eine Probe von dem, was ich getan habe:
Optional valueFromDB = getUserById("12");
User user = valueFromDB.get();
.....
public Optional<User> getUserById(String id) {
//...
return Optional.of(userRepository.findOne(id)); // NullPointerException!
}
Wenn null nicht möglich ist, sehe ich nicht, warum man es in einem Optional
wickeln würde. Der Typ in der verknüpften Antwort sagte: "Nun, wenn ein NullPointer passiert, passiert es sofort!" Aber will ich das wirklich? Wenn der einzige Zweck eines Optional
ist, den Programmierer zu erinnern, der solch ein Objekt erhält, um null
im Gedächtnis zu behalten (er HAT es auszupacken), warum sollte ich NullPointerException
zur Verpackungszeit haben wollen?
Edit: Ich brauchte die Frage zu bearbeiten, weil es als Duplikat markiert habe, obwohl ich bereits gesagt, verknüpft Frage von Anfang an. Ich habe auch erklärt, warum die Antwort mich nicht befriedigt hat, aber jetzt muss ich meinen Text mit einer Erklärung bearbeiten. Aber hier ist ein Anhang zu dem, was ich fragen will, da ich 5 Antworten bekam und alle Antworten einen anderen Fall, aber nicht vollständig abgedeckt, was ich versuche, hier zu fragen:
Gibt es einen Grund, dass Optional.of (null) ist unmöglich und sie fügten speziell Optional.ofNullable() für den Nullfall hinzu?
Verwendung von Streams sollte nicht das Problem mit meiner Idee der Implementierung sein. Ich habe eine Menge Einblick aus Ihren Antworten, danke dafür. Aber die eigentliche Frage ist bis jetzt nicht beantwortet worden, soweit ich es verstehe/verstehe. Vielleicht hätte ich fragen sollen: "Was, wenn wir die Optional.of()
Methode entfernen und nur Optional.ofNullable()
in Java 9 zulassen, würde es ein Problem geben außer der Abwärtskompatibilität?"
Der einzige Zweck von 'Optional' besteht darin, deutlich anzuzeigen, dass möglicherweise kein Ergebnis vorliegt. Bei richtiger Verwendung müssen Sie keine "Null" -Kontrollen durchführen und "user.ifPresent" (doAMethod()) 'ausführen oder in Streams und anderen JDK8-APIs verwenden, ohne nach" null "-Elementen suchen zu müssen. Wenn es richtig verwendet wird, kann es den Umfang der Nullprüfung in Ihrem Code reduzieren. –
@M.Deinum: 'ifPresent' ist im Grunde ein Null-Check. : P Es sieht einfach besser aus und ist bequemer zu benutzen. Ich verstehe zwar die Sache mit den Streams, aber das hat nichts mit der Frage selbst zu tun. Ich habe Optionals nicht in Frage gestellt, ich habe gefragt, ob 'Optional.of()' nützlich ist. Tut mir leid, wenn das nicht klar war. – codepleb
Wenn Ihre Methode nicht Null zurückgeben soll, stimme ich zu, dass Sie keine 'Optional' zurückgeben wollen. Auf der anderen Seite möchten Sie informiert werden, wenn der Wert, den Sie zurückgeben wollen, eines Tages null ist. Ich würde dafür eine gute alte Aussage verwenden. –