2016-06-09 15 views
0

Ich habe vor kurzem mit Guava und seine Asynchronous Future API konfrontiert.Guava CheckedFuture <X,Y> Karte zu CheckedFuture <Z,Y> ohne Blockierung

Ich habe eine Methode mit einer ähnlichen Erklärung wie dieses Gebrüll:

CheckedFuture<X, Y> update(final X entry)

, die zu einem bestimmten Zeitpunkt eine Methode mit folgenden Signatur nennen könnten:

CheckedFuture<Boolean, Y> delete(final X entry)

Was ich habe gesucht und nicht gefunden ist eine Möglichkeit, das Ergebnis aus dem Aufruf an delete zugeordnet werden CheckedFuture<X, Y>, die der Rückgabetyp vonzugeordnet ist.

Hat jemand es geschafft, ohne die gesamte Berechnung zu blockieren, indem Sie delete(entry).checkedGet() aufrufen?

Jede Hilfe wird geschätzt.

HINWEIS: weiß, dass ich die Guava javadocs die Vermeidung von CheckedFutures empfehlen, aber atm das ist, wie die API gebaut und es ist unpraktisch, es wieder aufzubauen (nicht bedeuten, ich bin nicht darauf gefreut :)

!

Antwort

1

Sie können Futures#transform

CheckedFuture<X, Y> update(final X entry) { 
    CheckedFuture<Boolean, Y> f = delete(entry); 
    ListenableFuture<X> tr = Futures.transform(f, (Function<Boolean, X>) input -> entry); 
    return Futures.makeChecked(tr, input -> (Y) input.getCause()); 
} 

CheckedFuture<Boolean, Y> delete(final X entry) { 
    return Futures.immediateFailedCheckedFuture(new Y()); 
} 
verwenden
Verwandte Themen