2016-06-09 107 views
0

我最近面臨着番石榴和它的異步未來API。Guava CheckedFuture <X,Y> maped CheckedFuture <Z,Y>沒有阻止

我有一個類似的聲明,因爲這一個波紋管的方法:

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

這在某些時候可能會調用具有以下簽名的方法:

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

我一直在看,並沒有發現是一種方法來映射調用結果delete映射到CheckedFuture<X, Y>這是返回類型的update

有沒有人能夠通過調用delete(entry).checkedGet()來阻止整個計算?

任何幫助表示讚賞。

注:我知道番石榴的javadoc建議CheckedFutures的迴避,但ATM是這樣的API是如何構建的,它是不切實際的重建它(沒有意思,我並不期待吧:)

回答

1

您可以使用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()); 
} 
相關問題