Gymterview
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.