Материал: 8 - Презентация

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Особенности параметризованныхЦентрдистанционногообучениятипов

•Использовать примитивные типы в качестве параметрических типов нельзя

•Если одинаковые настраиваемые типы имеют различные аргументы (типы-параметры), то это различные типы

//несовместимые,различныетипы

Garage<Wheeled> garage; Garage<Crossover> anotherGarage;

•Статические компоненты класса не могут использовать его типы-параметры

•Также настраиваемый класс не может расширять класс

Throwable

31 online.mirea.ru

Центрдистанционногообучения

Стирание типа

•В обобщенном коде информация о параметрах-типах

обобщения стирается (это значит, что при использовании обобщения любая конкретная информация о типе теряется )

•Тип известен только на стадии компиляции (во время статической проверки типов)

•После этого каждый обобщенный тип стирается, то есть заменяется необобщенным верхним ограничением

•Компилятор обеспечивает внутреннюю целостность использования типов, контролируя их на «входе» и «выходе», самостоятельно выполняя приведения типов

32 online.mirea.ru

Центрдистанционногообучения

Миграционная совместимость

•Обобщения не были частью языка с самого начала, и появились только в версии 1.5

•Стирание необходимо, чтобы можно было использовать обобщенный клиентский код с необобщенными библиотеками и наоборот

33 online.mirea.ru

Центрдистанционногообучения

Расплата за стирание

•Операции, для выполнения которых нужно точно знать типы времени выполнения,работать

небудут

• Приведение типов:

(T) var;

• Операция instanceof:

varue instaceof T;

• Операция new

T var = new T();

T[] array = new T[size]

• Создание массива конкретного типа

Type<Integer> arr = new Type<Integer>[10];

34 online.mirea.ru

Центрдистанционногообучения

Применение параметризованных типов в классах

class Name <T,E> { private T t; private E e;

public Name(T t, E e) { this.t = t; this.e = e; } public T getT() { return t; }

public void setE(E e) { this.e = e;}

}

class test {

public static void main(String[] args){

Name<String, Integer> obj1 = new Name<String, Integer>("string", 3); String a = obj1.getA();

obj1.setB(10);

Name obj2 = new Name(3, new ArrayList(3)); Integer i = (Integer)obj2.getA();

}

}

35 online.mirea.ru

Источник: https://studfile.net/preview/16403817/