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

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

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

Generics – type erasure

Методы тоже могут быть generic:

public class BoxUtil { // класс – не generic

static <E> void clear(AnyBox<E> box) {

box.set(null);

}

}

AnyBox<String> box = ...;

// обычно компилятор определяет параметр E автоматически:

BoxUtil.clear(box);

// Но если нужно, можно указать вручную:

BoxUtil.<String>clear(box);

online.mirea.ru

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

Generics – type erasure

Для типовых параметров могут быть указаны ограничения:

public class BoxUtil {

static <E extends Runnable> void runBox(AnyBox<E> box) {

E runnable = box.get(); // гарантируется, что E наследуется от Runnable

runnable.run();

}

}

BoxUtil.runBox(new AnyBox<String>()); // ошибка, String – не Runnable

BoxUtil.runBox(new AnyBox<Runnable>()); // компилируется

online.mirea.ru

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

Generics – type erasure

Иногда нам не важно значение типового параметра (wildcard):

public class BoxUtil {

static void clearBox(AnyBox<?> box) {

box.set(null);

}

}

BoxUtil.clearBox(new AnyBox<String>());

BoxUtil.clearBox(new AnyBox<Integer>());

online.mirea.ru

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

Generics – type erasure

Для ? тоже могут быть указаны ограничения:

public class BoxUtil {

static void runBox(AnyBox<? extends Runnable> box) {

Runnable runnable = box.get();

runnable.run();

}

}

BoxUtil.runBox(new AnyBox<String>()); // ошибка, String – не Runnable

BoxUtil.runBox(new AnyBox<Runnable>()); // компилируется

online.mirea.ru

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

Generics – type erasure

public class BoxUtil {

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

E value = from.get();

to.set(value);

}

}

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

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

// здесь важно, что у to и from один и тот же параметр E:

BoxUtil.copyBox(to, from);

online.mirea.ru

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