Функциональный интерфейс в Java задаёт один абстрактный метод-контракт и может быть реализован лямбдой или ссылкой на метод. Методы default и static не нарушают это условие.
Что такое функциональный интерфейс?
Функциональный интерфейс в Java задаёт один абстрактный метод-контракт и может быть реализован лямбдой или ссылкой на метод. Методы default и static не нарушают это условие.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Функциональный интерфейс в Java задаёт один абстрактный метод-контракт и может быть реализован лямбдой или ссылкой на метод. Методы default и static не нарушают это условие.
Аннотация @FunctionalInterface необязательна, но позволяет компилятору проверить намерение. Примеры — Predicate<T>, Function<T, R> и Runnable. Публичные методы, совпадающие с методами Object, не считаются отдельным функциональным контрактом. Наследование тоже учитывается: важен итоговый набор абстрактных обязательств, а не просто количество строк с методами в объявлении интерфейса.