Ответ
Функциональный интерфейс в Java/Kotlin — это интерфейс с одним абстрактным методом (SAM). Ключевые характеристики:
- Один абстрактный метод — например,
Runnable(run()). - Может иметь default/static методы — они не нарушают правило SAM.
- Аннотация
@FunctionalInterface(необязательна, но помогает компилятору проверить условие SAM).
Пример:
@FunctionalInterface
interface Calculator {
int calculate(int a, int b); // единственный абстрактный метод
default void log() { System.out.println("Logging"); } // default-метод допустим
}
В Kotlin используется fun interface для объявления:
fun interface Adder {
fun add(a: Int, b: Int): Int
}
Используется для лямбд и ссылок на методы.