Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Примеры встроенных дженериков Java: Дженерики

Для лучшего понимания дженериков, вспомним уже изученные и посмотрим на них еще раз уже новым взглядом. Сейчас нас интересуют следующие элементы:

  • Списки
  • Мапы
  • Функциональные интерфейсы

Списки

Все списки являются дженериками с одним параметром типа. Параметр можно указывать в правой части, как в примере ниже.

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]

В случае лямбда-функций тип всегда указывается у переменной, поэтому здесь параметр типа передается в левой части выражения.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 9 мая

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу