package edu.uw.zookeeper.common; import com.google.common.base.MoreObjects; import com.google.common.util.concurrent.ListenableFuture; public class ValueFuture<T,V, U extends ListenableFuture<V>> extends ToStringListenableFuture<V> { public static <T,V, U extends ListenableFuture<V>> ValueFuture<T,V,U> create( T value, U future) { return new ValueFuture<T,V,U>(value, future); } private final T value; private final U delegate; protected ValueFuture( T value, U delegate) { this.value = value; this.delegate = delegate; } public final T getValue() { return value; } @Override public U delegate() { return delegate; } @Override protected MoreObjects.ToStringHelper toStringHelper(MoreObjects.ToStringHelper helper) { return super.toStringHelper(helper.addValue(getValue())); } }