Раздел параметров типа универсальных типов Java следует за именем универсального класса. Например:
class name<T1, T2, ..., Tn> { /* ... */ }
Это довольно интуитивно понятно, когда вы освоите его. Однако я совершенно ошеломлен, увидев некоторые автономные разделы параметров типа в интерфейсных методах по умолчанию Comparator<T>
. Например:
default <U> Comparator<T> thenComparing(
Function<? super T, ? extends U> keyExtractor,
Comparator<? super U> keyComparator)
Очевидно, что метод возвращает какой-то объект-компаратор, но как вы объясните автономную <U>
в английских терминах?