The type parameter section of Java generic types follows the generic class name. For example:
class name<T1, T2, ..., Tn> { /* ... */ }
It's quite intuitive once you get a hang of it. However I am completely stumped to see some freestanding type parameter sections in the default interface methods of Comparator<T>. For example:
default <U> Comparator<T> thenComparing(
Function<? super T, ? extends U> keyExtractor,
Comparator<? super U> keyComparator)
Clearly the method is returning some kind of comparator object, but how do you explain the freestanding <U> in English terms?