Материал: 6 - Презентация 2 - Дженерики, Абстрактные типы данных, Стек

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

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

Generics – type erasure

Но почему не разрешить скопировать содержимое AnyBox<String> в AnyBox<Object>, который может хранить и строки тоже?

public class BoxUtil {

static <E> void copyBox(AnyBox<E> to, AnyBox<? extends E> from) { E value = from.get();

to.set(value);

}

}

AnyBox<Object> to = new AnyBox<>();

AnyBox<String> from = new AnyBox<>();

BoxUtil.copyBox(to, from);

online.mirea.ru

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

Generics – type erasure

Альтернативный вариант:

public class BoxUtil {

static <T, F extends T> void copyBox(AnyBox<T> to, AnyBox<F> from) {

F value = from.get();

to.set(value);

}

}

AnyBox<Object> to = new AnyBox<>();

AnyBox<String> from = new AnyBox<>();

BoxUtil.copyBox(to, from);

online.mirea.ru

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

Generics – type erasure

Еще один альтернативный вариант:

public class BoxUtil {

static <E> void copyBox(AnyBox<? super E> to, AnyBox<E> from) {

E value = from.get();

to.set(value);

}

}

AnyBox<Object> to = new AnyBox<>();

AnyBox<String> from = new AnyBox<>();

// “Object super String” – выполняется, Object – предок String:

BoxUtil.copyBox(to, from);

online.mirea.ru

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

Generics – type erasure

Java Generics FAQ:

http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html

online.mirea.ru

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

Generics – дизайн Comparable

public interface Comparable {

int compareTo(Object other);

}

public class String implements Comparable { public int compareTo(Object other) {

String otherStr = (String) other;

... // сравнение строк

}

}

online.mirea.ru

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