Почему в функциональном интерфейсе один метод

«Почему в функциональном интерфейсе один метод» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Функциональный интерфейс содержит ровно один абстрактный метод (SAM - Single Abstract Method), потому что он предназначен для использования с лямбда-выражениями. Когда интерфейс имеет только один метод, компилятор может однозначно сопоставить лямбда-выражение с этим методом.

Пример:

@FunctionalInterface
interface Calculator {
    int calculate(int a, int b);
}

// Использование
Calculator add = (a, b) -> a + b;

Ключевые моменты:

  1. Аннотация @FunctionalInterface не обязательна, но помогает компилятору проверять условие SAM
  2. Может содержать default и static методы
  3. Позволяет писать более чистый и лаконичный код
  4. Основа для Java Stream API и многих других возможностей Java 8+