Java中是否有ResolvedFuture类?

rip*_*234 4 java concurrency future

https://gist.github.com/2414323

有时,您已经知道计算的结果,但您的界面要求您返回Future.而不是实现一个长匿名类,或者扩展本身很复杂的AbstractFuture或FutureTask,我发现创建一个实现的小型类更简单Future.

我的问题是 - 在一个标准库中是否存在类似我下面写的类?

用法:

Future<Boolean> iHaveToReturnAFutureButIAlreadyKnowTheAnswer() {
    return new ResolvedFuture(true);
}
Run Code Online (Sandbox Code Playgroud)

码:

/**
 * Used when you need to return a Future, but you already have the answer.
 */
public class ResolvedFuture<T> implements Future<T>{
    private final T item;

    public ResolvedFuture(T item) {
        this.item = item;
    }

    @Override
    public boolean cancel(boolean mayInterruptIfRunning) {
        return false;
    }

    @Override
    public boolean isCancelled() {
        return false;
    }

    @Override
    public boolean isDone() {
        return true;
    }

    @Override
    public T get() throws InterruptedException, ExecutionException {
        return item;
    }

    @Override
    public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
        return item;
    }
}
Run Code Online (Sandbox Code Playgroud)

axt*_*avt 6

标准库不支持它,但某些第三方库可能包含这样的实现.例如,Futures.immediateFuture()来自Google Guava.