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

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

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

Простые варианты при наследовании

class C1<T>{ T t;

}

class C2<E> extends C1{ E e;

}

class C3<E> extends C1<E> { E e;

}

class C4<E, T> extends C1<T> { E e;

}

class C5<E> extends C1<Integer>{ E e;

}

class C6 extends C1<Integer>{}

C1<String> c1 = new C1<String>(); c1.t имееттип String;

C2<String> c2 = new C2<String>();

c2.t

имееттип

Object;

c2.e

имееттип

String;

C3<String> c3 = new C3<String>();

c3.t

имееттип

String;

c3.e

имееттип

String;

C4<String, Integer> c4

= new

C4<String, Integer>();

 

c4.e имееттип

String;

 

c4.t имееттип

Integer;

 

C5<String> c5 = new C5<String>();

c5.t

имееттип

Integer;

c5.e

имееттип

String;

C6 c6 = new C6();

c6.t имееттип Integer;

36 online.mirea.ru

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

Простые параметризованные типы в интерфейсах

interface IN<T,E> { T meth1 (E e); E meth2 (T t);

}

class CL implements IN{

public Object meth1(Object o) { ... } public Object meth2(Object o) { ... }

}

class CL<T,E> implements IN<T,E> {

class CL<T, E> implements IN {

public T meth1(E e) { ... }

public Object meth1(Object o){}

public E meth2(T t) { ... }

public Object meth2(Object o){}

}

}

class CL<T,E> implements IN<Type1, Type2> { public T meth1(E e) { ... }

public E meth2(T t) { ... }

}

class CL implements IN<Type1, Type2> { public Type1 meth1(Type2 type2) { ... } public Type2 meth2(Type1 type1) { ... }

}

37 online.mirea.ru

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

Особенности параметризованных типов

•Тип можно указывать не только для классов и интерфейсов, но

иметодов и конструкторов(не зависимо от того, параметризирован класс и интерфейс или нет

•В этом случае тип указывается перед возвращаемым значением

•При использовании одинаковых идентификаторов типа у класса

иу метода или конструктора, тип последних скрывает тип класса (интерфейса)

38 online.mirea.ru

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

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

interface GIN <T> {

//Тип-парамескрываметодаинтерфейсапт

 

<T> void meth1 (T t);

 

<E> E meth2 (E e);

//Уметодасвойтип

-параметр

 

T meth3 (T t);

//Методиспользуетнтерфейса

 

}

 

 

 

class GCL<T> implements GIN<T> {

 

 

T t;

}

//Конскрывттипклассаукторет

 

public <T> GCL(T t){

 

public <E> GCL (E e, T t) {

} //Уконсвойтруктораионп

 

//используеттипкласса

 

 

@Override

 

 

 

public <T1> void meth1(T1 t1) { } //реализацияметодабезпутаницы

 

//сименамитипов

-параметров

 

@Override

 

 

 

public <E> E meth2(E e) {return e; }

 

@Override

 

 

39 online.mirea.ru

public T meth3(T t) {return null;}

}

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

Одна из проблем

Если информация о типе стирается, как вызвать определенный метод у объекта имеющего тип – параметр?

class GenericSpeaker<T> { T source;

public void giveVoice() { //source.say(); ошибка компиляции

}

}

40 online.mirea.ru

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