Originally posted by Jim Yingst:
I believe this relates to the rules for capture conversion, and specifically to the statement that "Capture conversion is not applied recursively." Capture conversion doesn't apply if the ? is nested within multiple < > braces. So it's necessary to introduce an additional ? within the outermost < >, to allow capture conversion to work.
[...] you can oly apply capture conversion if the type variable is defined at the top-level of the generic type [...] suppose you have the method:
static <T> void processListOfLists(List<List<T>> list)
and you tried to invoke it with an argument of type List<List<?>>. The capture will not uniquely determine the an element type for the outer list [...]