Обобщения в Java - PullRequest
       34

Обобщения в Java

7 голосов
/ 18 ноября 2011

Я хотел бы понять синтаксис следующего типа.

Пример:

public interface A < T extends A < T> > {

}

Какова логика этого интерфейса?

1 Ответ

14 голосов
/ 18 ноября 2011

Это будет использоваться следующим образом:

class X implements A<X> { /* ... */ }

Другими словами, вы вынуждены сделать параметр A самого класса X, а что-то вроде class X implements A<Unrelated> запрещено.

Эта конструкция предоставляет интерфейсу доступ к X через универсальный параметр, а ограничение типа гарантирует, что оно не будет использовано неправильно. Например, теперь можно предположить, что T предоставляет все методы, которые A делает.

Обратите внимание, что эта конструкция формально чем-то похожа на любопытно повторяющийся шаблон в C ++ (хотя технически он совершенно другой). На обоих языках это позволяет «базовому классу» рассуждать о его конечном производном использовании.

...