It says that the current ExecutorService.invokeAll signature:
<T> List<Future<T>> invokeAll(Collection<Callable<T>> tasks)
<T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks)
The poster is right. The proposed signature is a much better choice.
However, there is a small compatibility issue. While the change
would be binary compatible with existing usages, doing this
would cause existing ExecutorService implementations/subclasses written
by usrs to encounter compilation errors until they also change the
This is a hard decision -- a small benefit to the many users of
ExecutorServices vs a small risk that anyone has ever written
a class that overrides this method and couldn't trivially adapt it.
So we'd like to know if anyone on this list has done this.
If you've ever written a custom ExecutorService that
overrrides the version of invokeAll in AbstractExecutorService,
and couldn't easily adapt, could you let me know?