Что такое функциональный интерфейс?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Функциональный интерфейс — это интерфейс, который содержит ровно один абстрактный метод. Он может содержать дефолтные (default) и статические (static) методы. Используется для работы с лямбда-выражениями и ссылками на методы.
Аннотация @FunctionalInterface не является обязательной, но рекомендуется для явной идентификации и для того, чтобы компилятор мог проверить, соответствует ли интерфейс определению функционального. Если интерфейс помечен ею, но содержит более или менее одного абстрактного метода, компилятор выдаст ошибку.
Примеры стандартных функциональных интерфейсов из пакета java.util.function:
Predicate<T>: Принимает аргумент типаTи возвращаетboolean. Один абстрактный метод:boolean test(T t);.Consumer<T>: Принимает аргумент типаTи ничего не возвращает (void). Один абстрактный метод:void accept(T t);.Supplier<T>: Ничего не принимает и возвращает значение типаT. Один абстрактный метод:T get();.Function<T, R>: Принимает аргумент типаTи возвращает значение типаR. Один абстрактный метод:R apply(T t);.
Пример пользовательского функционального интерфейса:
@FunctionalInterface
interface StringProcessor {
String process(String input); // Единственный абстрактный метод
// Дополнительно можно добавить дефолтные или статические методы
default String toUpperCase(String input) {
return input.toUpperCase();
}
}
Пример использования с лямбда-выражением:
StringProcessor processor = s -> s + " processed";
String result = processor.process("hello"); // "hello processed"