Что означает «Связанный с рекурсивным типом» в Generics? - PullRequest
19 голосов
/ 12 сентября 2011

Я читаю главу об общих принципах эффективной Java [Item 27].

В книге есть такой параграф:

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

и это:

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

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

Ответы [ 2 ]

23 голосов
/ 12 сентября 2011

Что такое рекурсивная привязка типа

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

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

и как вышеуказанный фрагмент кода помогает достичь взаимной сопоставимости?

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

5 голосов
/ 12 сентября 2011

В часто задаваемых вопросах по Java Generics написано Angelika Langer, в котором разъясняются детали такой декларации: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ106

...