Gymterview
junior

Что такое функциональные интерфейсы?

Функциональный интерфейс — это интерфейс, содержащий ровно один абстрактный метод. Именно такой интерфейс может служить целевым типом для лямбда-выражения или ссылки на метод.

Аннотация @FunctionalInterface (необязательная, но рекомендуемая) сообщает компилятору о намерении и запрещает добавление второго абстрактного метода. Интерфейс может содержать любое количество default и static методов — это не нарушает «функциональность», поскольку они не являются абстрактными.

Пакет java.util.function содержит 43 стандартных функциональных интерфейса, покрывающих типичные паттерны: преобразование (Function), проверку условия (Predicate), потребление значения (Consumer), создание значения (Supplier) и операции (UnaryOperator, BinaryOperator).

На собеседовании: частая ловушка — спросить, является ли интерфейс с двумя методами функциональным, если один из них совпадает с методом Object (например, equals). Ответ: да, потому что методы Object не считаются абстрактными в контексте функционального интерфейса.