abstract class BaseTask> { public abstract S makeTask(int depth, ParallelStream coll); } class ForEachTask extends BaseTask> { public ForEachTask makeTask(int depth, ParallelStream coll) { return new ForEachTask(); } } class ParallelStream { }