Comment créer un futur complet en Java

Quel est le meilleur moyen de construire un futur complet en Java? J’ai implémenté mon propre CompletedFuture ci-dessous, mais j’espérais que quelque chose comme ça existe déjà.

 public class CompletedFuture implements Future { 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, que vous pouvez obtenir en appelant:

 Future future = ConcurrentUtils.constantFuture(T myValue); 

Dans Java 8, vous pouvez utiliser CompletableFuture intégré:

  Future future = CompletableFuture.completedFuture(value); 

Guava définit Futures.immediateFuture(value) , qui fait le travail.

J’ai trouvé une classe très similaire à la votre dans le Java rt.jar

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

Il vous permet également de spécifier une exception qui peut être levée lorsque invoquer get (). Définissez simplement cette valeur sur null si vous ne souhaitez pas lancer une exception.

Dans Java 6, vous pouvez utiliser les éléments suivants:

 Promise p = new Promise(); p.resolve(value); return p.getFuture();