1.75M
Category: programmingprogramming

Обобщения в Java (Generics). Занятие 1

1.

Обобщения в Java (Generics)
Занятие 1

2.

Что такое обобщения?
В своей основе термин обобщения означает параметризованные типы.
Параметризованные типы важны, поскольку они поз воляют создавать классы,
интерфейсы и методы, rде тип данных, с которым они работают, указывается в
качестве параметра. Например, с использованием обобщений можно создать
единственный класс, который автоматически работает с разными типами
данных. Класс, интерфейс или метод, который оперирует на параметризованном
типе, называется обобщенным.

3.

Простой пример обобщения
class Gen<T> {
T ob;
Gen(T o) {
ob = o;
}
T getOb() {
return ob;
}
void showType() {
System.out.println("Tипoм Т является: " + ob.getClass().getName());
}
}

4.

Обобщения работают только со ссылочными типами
При объявлении экземпляра обобщенного типа передаваемый параметру типа аргумент типа
должен быть ссылочным типом. Примитивный тип вроде int или char применять нельзя. Скажем,
для экземпляра Gen передать в Т можно любой тип класса, но передавать параметру типа какойлибо примитивный тип не разрешено. По этой причине следующее объявление будет
незаконным:
Gen<int> intOb = new Gen<int> (53) ;
// Ошибка , нельзя использовать
/ / примитивный тип

5.

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

6.

Каким образом обобщения улучшают
безопасность в отношении типов?
В этот момент вы можете задать себе следующий вопрос. Учитывая, что та же
функциональность, что и в обобщенном классе Gen, может быть достигнута без
обобщений, просто за счет указания Obj ect в качестве типа данных и
применения соответствующих приведений, то в чем польза от превращения Gen
в обобщенный класс? Ответ заключается в том, что обобщения автоматически
обеспечивают безопасность в отношении типов для всех операций с участием
Gen. В процессе они избавляют вас от необходимости вводить приведения типов
и проверять типы в коде вручную.

7.

Обобщенный класс с двумя параметрами типов
Обобщенный класс с двумя параметрами типов В обобщенном типе
допускается объявлять больше, чем один параметр типа. Чтобы
указать два или более параметров типов, просто применяйте список,
разделенный запятыми.
class TwoGen<T, V> {
}

8.

Общая форма обобщенного класса
Синтаксис обобщений, показанный в предшествующих примерах, можно свести к общей форме.
Вот синтаксис объявления обобщенного класса:
class имя-класса <список-параметров-типов> { // ...
А так выглядит полный синтаксис для объявления ссылки на обобщенный класс и создания
экземпляра:
имя-класса <список-параметров-типов> имя-переменной =
new имя-класса <список-параметров-типов> (список-аргументов -конструктора);

9.

Ограниченные типы
В предшествующих примерах параметры типов можно было з аменить любым типом класса,
что подходит для многих целей, но иногда пол езно ограничить типы, которые разрешено
передавать параметру типа. Предположим, что необходимо создать обобщенный класс,
содержащий метод, который возвращает среднее значение массива чисел. Кроме того, вы
хотите использовать этот класс для получения среднего значения массива чисел любого типа,
включая int, float и douЫe. Таким образом, тип чисел желательно указывать обобщенно с
применением параметра типа.
Для обработки таких ситуаций в Java предусмотрены ограниченные типы. Когда определяется
параметр типа, вы можете создать верхнюю границу, объявляющую суперкласс, от которого
должны быть порождены все аргументы типов. Цель достигается за счет применения
конструкции extends при указании параметра типа:
<Т extends superclass>

10.

Использование аргументов
с подстановочными знаками
Аргумент с подстановочным знаком указывается посредством
символа ? и представляет неизвестный тип.
boolean isSameAvg ( Stats<?> оЬ) {}

11.

Ограниченные аргументы с подстановочными
знаками
Аргументы с подстановочными знаками могут быть ограничены во многом так
же, как и параметр типа. Ограниченный аргумент с подстановочным знаком
особенно важен при создании обобщенного типа, который будет оперировать на
иерархии классов.
Примеры границ аргументов с подстановочным знаком:
<? extends superclass> - верхняя граница
<? super subclass> - нижняя граница

12.

Контакты
Офис в Москве:
107564, ул. Краснобогатырская д.6 стр.2
Телефон: +7 (495) 120-05-33
Email: [email protected]
English     Русский Rules