Обобщенные интерфейсы в Java

Помимо классов и методов, обобщенными можно объявлять и нтерфейсы. Обобщенные интерфейсы объявляются таким же образом, как и обобщенные классы.

Ниже приведен характерный тому пример. В нем создается обобщенны йинтерфейс MinMax, где объявляются методы min() и max(), которые, как предпо­лагается, должны возвращать минимальное и максимальное значения из некото­рого множества объектов.

Ниже приведен результат выполнения данной программы.

Большую часть этой программы нетрудно понять, но некоторые ключевые моменты следует все же пояснить.

Прежде всего обратите внимание на следующее объявление обобщенного интерфейса MinMax:

Как правило, обобщенный интерфейс объявляется таким же образом, как и обобщенный класс. В данном случае параметр типа T ограничивается сверху интерфейсом Comparable.

Интерфейс Comparable определен в пакете java.lang для целей сравнения объектов. Параметр его типа обозначает тип сравниваемых объектов.

Затем интерфейс MinMax реализуется в классе MyClass. Объявление класса МyClass выглядит следующим образом:

Обратите особое внимание, каким образом параметр типа T сначала объявляет­ся в классе MyClass, а затем передается интерфейсу MinMax.

Интерфейсу MinMax требуется тип класса, реализующего интерфейс Comparable, поэтому в объявле­нии класса, реализующего этот интерфейс (в данном случае — класса MyClass ), должно быть наложено такое же ограничение.

Более того, однажды наложенное ограничение уже не нужно повторять в операторе implements. В действительности это было бы даже неверно.

Например, приведенная ниже строка неверна и не может быть скомпилирована. Однажды установленный параметр типа просто передается интерфейсу без последующих видоизменений.

Как правило, класс, реализующий обобщенный интерфейс, должен быть так­же обобщенным — по крайней мере, в тех случаях, когда он принимает параметр типа, передаваемый далее интерфейсу.

Например, следующая попытка объявить класс MyClass приведет к ошибке:

В классе MyClass параметр типа не объявляется, поэтому передать его интер­фейсу MinMax никак нельзя.

В данном случае идентификатор параметра типа Т просто неизвестен, и поэтому компилятор выдаст ошибку.

Безусловно, если класс реализует конкретный тип обобщенного интерфейса, то реализующий класс не обязан быть обобщенным, как показано ниже.

Обобщенный интерфейс дает два преимущества. Во-первых, он может быть реализован для разных типов данных.

И во-вторых, он позволяет наложить огра­реничения на типы данных, для которых он может быть реализован. В примере ин­терфейса MinMax вместо параметра типа Т могут быть подставлены только типы классов, реализующих интерфейс Comparable.

Ниже приведена общая синтаксическая форма обобщенного интерфейса.

Здесь список_параметров_типа обозначает разделяемый запятыми список па­раметров типа.

Когда реализуется обобщенный интерфейс, следует указать аргу­рменты типа, как показано ниже.

Советуем вам следующее видео к просмотру: