Quelle est la meilleure façon de construire un futur achevé en Java? J'ai implémenté mon propre CompletedFuture
ci-dessous, mais j'espérais quelque chose comme ça qui existe déjà.
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 définit une implémentation similaire appelée ConstantFuture, vous pouvez l'obtenir en appelant:
Future<T> future = ConcurrentUtils.constantFuture(T myValue);
Dans Java 8, vous pouvez utiliser le CompletableFuture intégré:
Future future = CompletableFuture.completedFuture(value);
Guava définit Futures.immediateFuture(value)
, qui fait le travail.