Ответ
Supplier<T> — это функциональный интерфейс из пакета java.util.function, который не принимает аргументов, но возвращает результат типа T. Его единственный абстрактный метод — T get().
Основное назначение: отложенная (ленивая) генерация или поставка значений.
Примеры использования:
-
Ленивая инициализация или генерация данных:
Supplier<String> uniqueIdSupplier = () -> UUID.randomUUID().toString(); System.out.println(uniqueIdSupplier.get()); // Вызовет генерацию UUID -
Использование в Stream API и коллекторах:
// Поставщик новой коллекции для Collectors.toCollection Supplier<ArrayList<String>> listSupplier = ArrayList::new; List<String> filteredList = someStream.collect(Collectors.toCollection(listSupplier)); -
Реализация паттерна «Стратегия» или кэширования:
Map<String, Supplier<Object>> strategyMap = new HashMap<>(); strategyMap.put("A", () -> expensiveOperationA()); strategyMap.put("B", () -> expensiveOperationB()); // Операция выполнится только при вызове get() Object result = strategyMap.get(key).get();
Ключевые особенности:
- Не имеет входных параметров.
- Может выбрасывать проверяемые исключения (требует обработки внутри лямбды или обёртки).
- Часто используется вместе с
Optional.orElseGet(Supplier)для ленивого предоставления значения по умолчанию. - Является противоположностью
Consumer<T>, который принимает значение, но ничего не возвращает.