2016-01-21 6 views
7

In Java 8, è meglio per l'interfaccia o la classe astratta definire le API restituendo CompletableFuture invece di restituire Future? Considerando lo it is ugly converting Future to CompletableFuture e il fatto che lo CompletableFuture darà al chiamante una maggiore flessibilità nell'utilizzo diretto dello stile funzionale, quale potrebbe essere una buona ragione per un'API per restituire semplicemente Future?Devo restituire CompletableFuture o Future quando definisco l'API?

+0

Ho appena fatto questa domanda 2 minuti fa e 1 voto ravvicinato già? Cosa c'è di sbagliato nel chiedere casi d'uso reali per le scelte di programmazione/progettazione? – derrdji

+0

Direi che è un po 'largo. Forse aggiungere ciò che è il caso d'uso? –

+0

Il caso di utilizzo è che sto progettando un'API asincrona che elabora l'elaborazione dei file, le mie passate conoscenze mi dicono di restituire Future , ma dopo aver appreso dall'altra domanda SO che ho collegato, sento che Java8 mi sta dicendo di restituire CompletableFuture . Non sono sicuro e ho bisogno di aiuto. – derrdji

risposta

3

I miei 2 cts:

  • restituendo un futuro, si tengono aperte le opzioni e possono restituire un futuro, o un CompletableFuture - non fa alcuna differenza dal punto di vista del chiamante.
  • restituendo un CompletableFuture, offri al chiamante più opzioni (ottengono più metodi) ma ti impegni anche a restituire quel tipo di Future - se in due anni ti rendi conto che restituire un BetterFuture avrebbe più senso, dovrai cambia l'API, che non è buona.

Quindi dovresti probabilmente valutare la probabilità che tu voglia restituire qualcosa di diverso da un CompletableFuture in futuro (haha) e decidere di conseguenza.

1

ho pensato di tornare in questo e fornire alcuni aggiornamenti sulle mie decisioni finali:

Per il mio proprio codice/design, sono andato con l'utilizzo CompletableFuture come tipo di ritorno, perché

  • questo è un metodo protected abstract di una parte interna che voglio rendere estendibile;
  • Non ho bisogno di un'interfaccia per definire il binding;
  • lo scopo principale di questo tipo di ritorno è un futuro (per IO asincrono), personalmente ritengo che l'API in stile funzionale fornita da CompletableFuture rappresenti un ulteriore vantaggio/promemoria/incoraggiamento dell'uso dello stile funzionale per gli sviluppatori futuri.

Con questo detto, avrei sicuramente utilizzare l'interfaccia CompletableStage come tipo di ritorno, se fossi stato la progettazione di un'API pubblica, perché:

Problemi correlati