web-dev-qa-db-fra.com

Comment créer un futur terminé dans java

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();
    }
}
66
Jake Walsh

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);
55
hoaz

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

 Future future = CompletableFuture.completedFuture(value);
162
Andrejs

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

35
Louis Wasserman