Функциональный интерфейс в Java 8 — это интерфейс, который содержит ровно один абстрактный метод. Этот единственный абстрактный метод определяет основной контракт интерфейса и позволяет использовать лямбда-выражения.
Есть два подхода для определения функционального интерфейса:
@FunctionalInterfaceАннотация @FunctionalInterface необязательна, но рекомендуется, так как она обеспечивает проверку на этапе компиляции, что интерфейс соответствует требованиям функционального интерфейса.
Основное правило требует ровно одного абстрактного метода. Однако есть одно критичное исключение:
java.lang.Object, не считаются абстрактными методами, даже если они объявлены как абстрактные в интерфейсеЭто исключение позволяет функциональным интерфейсам переопределять методы Object, такие как equals(), hashCode() или toString(), без нарушения правила единственного абстрактного метода.
@FunctionalInterface
public interface MyFunctionalInterface {
void performAction(); // Единственный абстрактный метод
@Override
boolean equals(Object obj); // Не учитывается
}
Придерживаясь такой структуры, функциональные интерфейсы позволяют использовать лямбда-выражения и ссылки на методы, которые обеспечивают более чистый и лаконичный синтаксис для реализации простого поведения.
Функциональный интерфейс должен содержать ровно один абстрактный метод, и методы переопределённые из java.lang.Object не учитываются в этом ограничении.
Новый — ещё не проверен сообществом
Вы