Обобщения Java - Как мне прочитать это: Foo <T extends Bar <? расширяет Foo <T>>>? - PullRequest
3 голосов
/ 06 мая 2011

Я знакомлюсь с дженериками Java (проработав много времени над унаследованным кодом даже с JDK 1.4 ... 1.3), и я не совсем понимаю:

public class Foo<T extends Bar<? extends Foo<T>>> { ...

Где Foo и Bar - два общих класса.

Как это понимать, потому что я не совсем понимаю?

Я много читал о дженериках Java, но это немного ошеломляет (по крайней мере, для меня, как новичка).

1 Ответ

4 голосов
/ 06 мая 2011

Ну, Foo должен быть параметризован как T. Это T само по себе должно расширять Bar<U> для некоторого типа U, так что U расширяет Foo<T>. (Где «extension» может означать «тот же тип, что и» в данном случае.) Я использовал U здесь как имя произвольного типа, но оно не указано в объявлении, поэтому ?.

Вы правы, что это немного ошеломляет, но обычно в обстоятельствах, когда подобные вещи возникают, это в конечном итоге делает вещи проще. Если вы можете привести конкретный пример, мы сможем объяснить немного более полезно.

...