In Java < 8, "unsichere" Objekte (Objekte oder null) zurückkehrte, konnte ich Rückgabetyp in Unterklasse spezialisieren:Optional <> und Rückgabetyp Verengung
class A {}
class B extends A {}
interface Sup { A a(); /* returns A instance, or null */ }
interface Sub extends Sup { B a(); }
In Java 8, wenn ich will zu meinen API „sicherer“ zu machen, sollte ich Optional<A>
anstelle von „rohen“ A
zurück:
interface Sup { Optional<A> a(); }
interface Sub extends Sup { Optional<B> a(); }
Aber nicht kompilieren! Weil Optional<B>
keine Unterklasse von Optional<A>
ist.
Wie soll ich dieses Problem lösen?
Es gibt [Schulen des Denkens] (http://Stackoverflow.com/q/9561295/1079354), die glauben, dass das Verschieben in das 'Optional'-Paradigma weniger NPEs erzeugt und zwingt, besser darüber nachzudenken, welche Verhaltensweisen der Code hat hat eigentlich. – Makoto
@Makoto Ich kenne die Argumente, und ich stimme ihnen zu (ich benutze "Optional" die ganze Zeit). Mein Kommentar am Ende war über die Kombination '?' Und 'Optional' –
Die Obergrenze ist nicht das Schlimmste, was passieren könnte; Es kann durchaus berechtigte Gründe dafür geben, warum man das tut. Der Grund, warum ich so reagiert habe, war, dass du "null" erwähnt hast. – Makoto