Для лучшего понимания дженериков, вспомним уже изученные и посмотрим на них еще раз уже новым взглядом. Сейчас нас интересуют следующие элементы:
- Списки
- Мапы
- Функциональные интерфейсы
Списки
Все списки являются дженериками с одним параметром типа. Параметр можно указывать в правой части, как в примере ниже.
var items = new ArrayList<String>();
items.add("Sun");
items.add("Mars");
А можно задавать на уровне типа переменной, опуская указание в правой части.
List<String> items = new ArrayList<>();
items.add("Sun");
items.add("Mars");
Мы отдаем предпочтение первому методу, так как стараемся по возможности полагаться на вывод типов переменных через использование var
.
Мапы
В случае Map
параметров типа уже два. Один для ключей другой для значений.
var codes = new HashMap<String, Integer>();
codes.put("france", 33);
codes.put("germany", 49);
В остальном это такой же дженерик.
Функциональные интерфейсы
В Java встроено множество функциональных интерфейсов для типовых операций, которые обычно используются внутри библиотек. Например, для фильтрации часто бывает нужна лямбда-функция, которая принимает на вход элемент коллекции, выполняет проверку и возвращает true
или false
в зависимости от результата этой проверки. Такой интерфейс можно создать самостоятельно, а можно воспользоваться готовым дженериком.
// Дженерик
Predicate<Integer> isGreaterThanFive = number -> number > 5;
isGreaterThanFive.test(10); // true
isGreaterThanFive.test(3); // false
var numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Мы еще не проходили стримы, но скоро будем
var filteredNumbers = numbers.stream()
// вызывает лямбду для каждого элемента
// формирует новый список из элементов, которые прошли проверку
.filter(isGreaterThanFive)
.toList();
System.out.println(filteredNumbers); // Output: [6, 7, 8, 9, 10]
В случае лямбда-функций тип всегда указывается у переменной, поэтому здесь параметр типа передается в левой части выражения.
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.