2016-06-09 4 views
0

저는 최근 Guava와 Asynchronous Future API에 직면했습니다.Guava CheckedFuture <X,Y> 차단 된 상태가 아닌 <Z,Y>에 매핑

나는 울부 짖는 이것과 유사한 선언하는 방법이 있습니다 어떤 시점에서 다음과 같은 서명을 가진 메소드를 호출 할 수

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

:

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

를 내가 찾고 있었고 찾을 수 없습니다 delete에 대한 호출에서 결과를 매핑하는 방법입니다 CheckedFuture<X, Y> 반환 유형은에 매핑됩니다.

delete(entry).checkedGet()을 호출하여 어느 시점에서 전체 계산을 차단하지 않고도 누구나 할 수 있습니까?

도움을 주시면 감사하겠습니다.

참고 : 나는 구아바의 javadoc는 CheckedFutures의 회피는 권장 알고 있지만, 기압이 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()); 
}