In Java 8, ist es besser für die Schnittstelle oder eine abstrakte Klasse APIs zu definieren CompletableFuture
Rückkehr statt Future
der Rückkehr? In Anbetracht it is ugly converting Future
to CompletableFuture
und die Tatsache, dass CompletableFuture
wird dem Anrufer mehr Flexibilität bei der Verwendung von funktionalem Stil direkt geben, was ein guter Grund für eine API nur Future
zurückkehren sein könnte?Sollte ich CompletableFuture oder Future beim Definieren der API zurückgeben?
7
A
Antwort
3
My 2 cts:
- durch eine Zukunft zurückkehren, halten Sie Ihre Optionen offen und eine Zukunft zurückkehren kann, oder eine CompletableFuture - es macht keinen Unterschied, aus der Sicht des Anrufers.
- durch eine CompletableFuture Rückkehr Sie den Anrufer mehr Optionen geben (sie mehr Methoden erhalten), aber sie begehen auch diese Art von Zukunft auf die Rückkehr - wenn in zwei Jahren merkt man, dass eine BetterFuture Rückkehr würde mehr Sinn machen, müssen Sie Ändere die API, was nicht gut ist.
So sollten Sie wahrscheinlich die Wahrscheinlichkeit beurteilen, dass Sie entsprechend etwas anderes als ein CompletableFuture in der Zukunft (haha) und entscheiden, zurückkehren wird.
1
dachte, ich würde zurückkommen und einige Updates auf meiner letzten Entscheidungen liefern:
Für meinen eigenen Code/Design, ging ich mit CompletableFuture
als Rückgabetyp verwenden, weil
- dies eine
protected abstract
Methode eines internen Teils, den ich erweiterbar machen möchte; - Ich brauche eine Schnittstelle nicht die Bindung zu definieren;
- der Hauptzweck dieser Rückgabetyp ist eine Zukunft (für async IO), ich persönlich fühle mich die funktionale API von
CompletableFuture
ist ein zusätzlicher Vorteil/Erinnerung/Ermutigung zur Verwendung von funktionalen Stil für die zukünftigen Entwickler.
Mit diesem wird gesagt, ich würde auf jeden Fall die CompletableStage
Schnittstelle als Rückgabetyp verwenden, hatte ich eine öffentliche API entwirft, weil:
- was @assylias und @Holger über vs. Schnittstelle sagte Realisierung und Verkettungs Fähigkeit
- und die Tatsache, dass
CompletableStage
CompletableFuture<T> toCompletableFuture()
ein Verfahren hat.
fragte ich gerade diese Frage vor 2 Minuten und 1 schließen Abstimmung schon? Was ist los mit der Frage nach tatsächlichen Anwendungsfällen für die Programmierung/Design-Entscheidungen? – derrdji
Ich würde es ein wenig breit schätzen. Vielleicht hinzufügen, was der Anwendungsfall ist? –
Der Anwendungsfall Ich entwerfe eine asynchrone API, die Dateiverarbeitung ausführt, mein vergangenes Wissen sagt mir, dass ich Future zurückgeben soll, aber nachdem ich von der anderen SO-Frage gelernt habe, möchte ich, dass Java8 mir CompletableFuture zurückgibt. Ich bin mir nicht sicher und brauche Hilfe. –
derrdji