junior
Для чего нужны функциональные интерфейсы Supplier, BooleanSupplier, DoubleSupplier, IntSupplier и LongSupplier?
Supplier<T> — функциональный интерфейс, представляющий поставщика данных. Метод get() не принимает аргументов, но возвращает объект типа T. Supplier используется для отложенного (lazy) создания объектов, фабрик и генерации значений.
Пример
Supplier<LocalDateTime> now = LocalDateTime::now;
now.get(); // текущее время в момент вызова
Примитивные специализации:
| Интерфейс | Тип результата |
|---|---|
Supplier<T> |
T |
BooleanSupplier |
boolean |
DoubleSupplier |
double |
IntSupplier |
int |
LongSupplier |
long |
Supplier применяется в Optional.orElseGet(), Stream.generate(), Objects.requireNonNull(obj, supplier) и других местах, где создание значения нужно отложить до момента, когда оно действительно потребуется.
На собеседовании: важно объяснить концепцию отложенного вычисления.
Optional.orElse(expensiveCall())вызывает метод всегда, аOptional.orElseGet(() -> expensiveCall())— только при отсутствии значения. Это ключевой пример полезностиSupplier.