I want to write an asynchronous method that returns a CompletableFuture. The only purpose of the future is to track when the method is complete, not its result. Would it be better to return CompletableFuture<Void> or CompletableFuture<?>? Is there a reason to prefer one or the other, or are they interchangeable?
CompletableFuture itself returns CompletableFuture<Void> from many of its methods.java.nio has a Future<Void> in AsynchronousSocketChannel: Future<Void> connect(SocketAddress remote).java.util.concurrent classes like ExecutorService and ScheduledExecutorService return Future<?>: for instance, with Future<?> submit(Runnable task).Note that I'm only asking about return types, not parameter lists, variable declarations, or other contexts.
It is best to use CompletableFuture<Void>.
According to this answer found by Sotirios Delimanolis, Future<?> is a minor API flaw. In Java 6 the submit() method used a Future<Object> internally, and so its return type was set to Future<?>. In Java 7 the implementation changed to use Future<Void> internally, but it was too late to change the API so the return value stayed as Future<?>.
Newer Java APIs use Future<Void> and CompletableFuture<Void>. Those are the examples we should follow.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With