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

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

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

Маски

\\Метод компилируется

public static List<?> getList() {

List<Fruit> fruits = new ArrayList<Fruit>(); fruits.add(new Apple());

return fruits;

}

List<?> wFruits1 = getList(); \\Работает

List<Fruit> wFruits2 = getList();

\\Ошибка компиляции

List<Apple> wFruits3 = getList();

\\Ошибка компиляции

51 online.mirea.ru

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

Маски

public static void addToList(List<?> fruits) {

\\add не работают все fruits.add(new Fruit()); fruits.add(new Apple()); fruits.add(new Citrus()); fruits.add(new Orange());

Object o = fruits.get(0); \\работает

\\остальные get не работают

Fruit f = fruits.get(0); Citrus c = fruits.get(0); Orange or = fruits.get(0);

}

//все вызовы не вызывают ошибки компиляции

addToList(new ArrayList<Fruit>()); addToList(new ArrayList<Apple>()); addToList(new ArrayList<Citrus>()); addToList(new ArrayList());

52 online.mirea.ru

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

Ограничение снизу

•Определяет ограничение супертипа

•<? super sub>

•Некоторый конкретный тип, параметр которого является суперклассом для sub

53 online.mirea.ru

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

• Имеется:

Проблема

List<Integer> list = new ArrayList<Integer>(); Map<Integer, Comparable<String>> m =

new HashMap<Integer,Comparable<String>>();

// Зачемдварписатьзаоднотоже???

• Хотелось бы:

List<Integer> list = new ArrayList<>(); Map<Integer, Comparable<String>> m =

new HashMap<>();

54 online.mirea.ru

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

Вывод типа (type inference) (Java 1.7)

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

• <> – «алмазная запись» (diamond notation)

• В основном используется при создании объектов в ходе инициализации переменных

• При создании объектов нельзя путать отсутствие указания типа (будет обобщенный тип) и оператор алмаз (будет вывод типа)

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

55 online.mirea.ru

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