103

Javaで完成した未来を構築する最良の方法は何ですか? 以下で独自に実装しましCompletedFutureたが、このようなものが既に存在することを望んでいました。

public class CompletedFuture<T> implements Future<T> {
    private final T result;

    public CompletedFuture(final T result) {
        this.result = result;
    }

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

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

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

    @Override
    public T get() throws InterruptedException, ExecutionException {
        return this.result;
    }

    @Override
    public T get(final long l, final TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException {
        return get();
    }
}
4

6 に答える 6

70

Apache Commons Lang は、ConstantFuture と呼ばれる同様の実装を定義しています。次の呼び出しで取得できます。

Future<T> future = ConcurrentUtils.constantFuture(T myValue);
于 2012-12-13T19:02:21.083 に答える
43

GuavaFutures.immediateFuture(value)、その仕事をするを定義します。

于 2012-12-13T19:25:30.837 に答える
-3

Java rt.jar であなたのクラスに非常によく似たクラスを見つけました

com.sun.xml.internal.ws.util.CompletedFuture

get() が呼び出されたときにスローされる例外を指定することもできます。例外をスローしたくない場合は、それを null に設定してください。

于 2015-06-25T19:37:00.773 に答える
-6

Java 6 では、以下を使用できます。

Promise<T> p = new Promise<T>();
p.resolve(value);
return p.getFuture();
于 2016-08-22T06:07:52.953 に答える