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();
}
}
Apache Commons Langは、ConstantFutureと呼ばれる同様の実装を定義しています。次の呼び出しで取得できます。
Future<T> future = ConcurrentUtils.constantFuture(T myValue);
Java 8では、組み込みのCompletableFutureを使用できます。
Future future = CompletableFuture.completedFuture(value);
Guava は Futures.immediateFuture(value)
を定義し、ジョブを実行します。