104
-
используются, когда один и тот же код
применим к большому числу
типов;
-
позволяют повысить безопасность, за счет
контроля типов на стадии
компиляции программы, а не выполнения;
-
в
основном используются контейнерами. Все интерфейсы и классы
коллекций сделали параметризированными.
interface Wheeled{}
class Crossover implements Wheeled{}
class Hatchback implements Wheeled{}
class Trailer implements Wheeled{}
class PotatoesBag {};
class Garage
{
private T keepingThing;
public Garage(T keepingThing){ this.keepingThing =
keepingThing; }
public T getKeepingThing(){ return keepingThing; }
}
class Man {
public static void main(String[] args) {
Garage garage = new Garage (new
Crossover());
Garage
anotherGarage =
new Garage
(new PotatoesBag());
PotatoesBag bag =
anotherGarage.getKeepingThing();
}
}
Особенности использования дженериков.
-
код работает только с тем типом, который указан в угловых скобках;
-
позволяют создавать более компактный код, чем при использовании
ссылок типа
Object
;
-
обеспечивают автоматическую проверку и приведение типов;
-
позволяют создавать хороший повторно используемый код.
Особенности параметризованных типов.
Использовать примитивные типы в качестве параметрических типов нельзя.
105
Если одинаковые настраиваемые типы имеют различные аргументы (типы-
параметры), то это различные типы.
//
несовместимые
,
различные
типы
Garage
garage;
Garage anotherGarage;
Статические компоненты класса не могут использовать его типы-параметры.
Также настраиваемый класс не может расширять класс Throwable.
Стирание типа.
В обобщенном коде информация о параметрах-типах обобщения стирается (это
значит, что при использовании обобщения любая конкретная информация о типе
теряется). Тип известен только на стадии компиляции (во время статической
проверки типов). После этого каждый обобщенный тип стирается, то есть заменяется
необобщенным верхним ограничением. Компилятор обеспечивает внутреннюю
целостность использования типов, контролируя их на «входе» и «выходе»,
самостоятельно выполняя приведения типов.
Достарыңызбен бөлісу: