Что означает "рекурсивный тип связанного" в 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
.
Ответ 2
В разделе "Часто задаваемые вопросы Java" содержится запись, написанная Анжелика Лангер, которая объясняет детали такого объявления: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ106