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]

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

Рекомендуемые программы