4

https://gist.github.com/2414323

計算の結果をすでに知っている場合もありますが、インターフェイスでは。を返す必要がありますFuture。長い匿名クラスを実装したり、それ自体が複雑なAbstractFutureやFutureTaskを拡張したりするよりも、を実装する小さなホルダークラスを作成する方が簡単だと思いますFuture

私の質問は、以下に書いたものと同様のクラスが標準ライブラリの1つにすでに存在するかどうかです。

使用法:

Future<Boolean> iHaveToReturnAFutureButIAlreadyKnowTheAnswer() {
    return new ResolvedFuture(true);
}

コード:

/**
 * 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;
    }
}
4

1 に答える 1

6

標準ライブラリはそれをサポートしていませんが、一部のサードパーティライブラリにはそのような実装が含まれている場合があります。たとえば、Futures.immediateFuture()GoogleGuavaから。

于 2012-04-18T15:44:20.797 に答える