Ответ
Функциональный интерфейс содержит ровно один абстрактный метод (SAM - Single Abstract Method), потому что он предназначен для использования с лямбда-выражениями. Когда интерфейс имеет только один метод, компилятор может однозначно сопоставить лямбда-выражение с этим методом.
Пример:
@FunctionalInterface
interface Calculator {
int calculate(int a, int b);
}
// Использование
Calculator add = (a, b) -> a + b;
Ключевые моменты:
- Аннотация
@FunctionalInterfaceне обязательна, но помогает компилятору проверять условие SAM - Может содержать default и static методы
- Позволяет писать более чистый и лаконичный код
- Основа для Java Stream API и многих других возможностей Java 8+