Curious: why do you want futureResults to be sometimes null and sometimes not depend on the subclass? It causes some unnecessary null checks. Couldn't you do:

    this(threadPool, new ArrayList<Future<?>>())