Lambda expression — это экземпляр Functional Interface. Когда ты пишешь lambda expression, компилятор автоматически преобразует её в совместимый тип функционального интерфейса в зависимости от контекста использования.
Functional Interface — это интерфейс, который содержит ровно один абстрактный метод. Этот единственный метод определяет контракт, который должна выполнять lambda expression. Распространённые примеры:
java.lang.Runnable — выполняет код без параметров и возвращаемого значенияjava.util.function.Consumer<T> — принимает один параметр и ничего не возвращаетjava.util.function.Function<T, R> — преобразует входные данные в выходныеjava.util.function.Predicate<T> — проверяет условие и возвращает booleanTarget type lambda expression определяется контекстом, в котором она используется:
Компилятор использует этот контекст, чтобы определить, какой функциональный интерфейс должна реализовать lambda.
Runnable task = () -> System.out.println("Hello");
Consumer<String> printer = message -> System.out.println(message);
Predicate<Integer> isPositive = num -> num > 0;
В первом примере lambda () -> System.out.println("Hello") имеет тип Runnable, потому что она присваивается переменной типа Runnable.
Lambda expressions не имеют собственного независимого типа. Вместо этого они принимают тип Functional Interface, которому присваиваются, что делает их гибким и типобезопасным способом передавать поведение как данные.
Lambda-выражение — это экземпляр функционального интерфейса, и его конкретный тип определяется контекстом целевого типа, где оно присваивается или используется.
Новый — ещё не проверен сообществом
Вы