2016-01-21 10 views
7

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?

+0

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

+0

Ich würde es ein wenig breit schätzen. Vielleicht hinzufügen, was der Anwendungsfall ist? –

+0

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

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: