Si votre Futureest le résultat d'un appel à une ExecutorServiceméthode (par exemple submit()), le plus simple serait d'utiliser leCompletableFuture.runAsync(Runnable, Executor) méthode à la place.
De
Runnbale myTask = ... ;
Future<?> future = myExecutor.submit(myTask);
à
Runnbale myTask = ... ;
CompletableFuture<?> future = CompletableFuture.runAsync(myTask, myExecutor);
le CompletableFuture est alors créé "nativement".
EDIT: Poursuite des commentaires de @SamMefford corrigés par @MartinAndersson, si vous voulez passer a Callable, vous devez appeler supplyAsync(), en convertissant le Callable<T>en a Supplier<T>, par exemple avec:
CompletableFuture.supplyAsync(() -> {
try { return myCallable.call(); }
catch (Exception ex) { throw new RuntimeException(ex); } // Or return default value
}, myExecutor);
Parce que T Callable.call() throws Exception;lève une exception et T Supplier.get();ne le fait pas, vous devez intercepter l'exception pour que les prototypes soient compatibles.