Что означает "рекурсивный тип связанного" в Generics?

Я читаю главу "Дженерики из эффективной Java" [пункт 27].

В этой книге есть этот пункт:

Допустимо, хотя и относительно редко, для параметра типа быть ограниченным некоторым выражением, включающим сам этот параметр. Это то, что известно как рекурсивная привязка типа.

и это:

// Using a recursive type bound to express mutual comparability
public static <T extends Comparable<T>> T max(List<T> list) {...}

Что такое рекурсивная привязка типа и как эта часть кода помогает достичь взаимной сопоставимости?

Ответы

Ответ 1

Что такое рекурсивный тип bound

Это: <T extends Comparable<T>>

Обратите внимание, что параметр типа T также является частью сигнатуры суперинтерфейса Comparable<T>.

и как эта часть кода помогает достичь взаимной сопоставимости?

Это гарантирует, что вы можете сравнивать объекты типа T. Без ограничения типа Comparable сравнивает любые два Object s. С привязкой типа компилятор может обеспечить сравнение только двух объектов типа T.