Guave Teammitglied hier.
Der wahrscheinlich größte Nachteil null
ist, dass es nicht offensichtlich ist, was es in einem bestimmten Kontext bedeuten sollte: Es hat keinen illustrativen Namen. Es ist nicht immer offensichtlich, dass null
dies "kein Wert für diesen Parameter" bedeutet - zum Teufel, als Rückgabewert bedeutet es manchmal "Fehler" oder sogar "Erfolg" (!!) oder einfach "die richtige Antwort ist nichts". Optional
ist häufig das Konzept, das Sie tatsächlich meinen, wenn Sie eine Variable auf Null setzen, aber nicht immer. Wenn dies nicht der Fall ist, empfehlen wir Ihnen, eine eigene Klasse zu schreiben, ähnlich wie, Optional
jedoch mit einem anderen Namensschema, um zu verdeutlichen, was Sie tatsächlich meinen.
Aber ich würde sagen, der größte Vorteil Optional
liegt nicht in der Lesbarkeit: Der Vorteil ist die Idiotensicherheit. Es zwingt Sie, aktiv über den fehlenden Fall nachzudenken, wenn Sie möchten, dass Ihr Programm überhaupt kompiliert wird, da Sie den Optional
Fall aktiv auspacken und ansprechen müssen. Null macht es beunruhigend einfach, Dinge einfach zu vergessen, und obwohl FindBugs hilft, denke ich, dass es das Problem nicht annähernd so gut angeht. Dies ist besonders relevant, wenn Sie Werte zurückgeben, die möglicherweise "vorhanden" sind oder nicht. Es ist weitaus wahrscheinlicher, dass Sie (und andere) vergessen, dass other.method(a, b)
ein null
Wert a
zurückgegeben werden könnte, null
als dass Sie dies bei der Implementierung vergessen könnten other.method
. RückkehrOptional
macht es Anrufern unmöglich, diesen Fall zu vergessen, da sie das Objekt selbst auspacken müssen.
Aus diesen Gründen empfehlen wir, dass Sie Optional
als Rückgabetyp für Ihre Methoden verwenden, jedoch nicht unbedingt in Ihren Methodenargumenten.
(Dies ist übrigens völlig aus der Diskussion hier gestrichen .)