Лямбда-выражения в Java 8 не имеют собственного встроенного типа. Вместо этого их тип определяется контекстом, в котором они используются.
Лямбда-выражение по сути является экземпляром функционального интерфейса. Функциональный интерфейс служит целевым типом для лямбды. Это означает:
Когда ты пишешь:
Predicate<String> isLonger = str -> str.length() > 5;
Лямбда-выражение str -> str.length() > 5 имеет тип Predicate<String>, потому что это функциональный интерфейс, которому оно присваивается.
Хотя лямбда-выражения похожи на ссылки на методы, это разные концепции. Обе могут использоваться там, где ожидаются функциональные интерфейсы, но у них разный синтаксис и разные случаи применения.
Один и тот же синтаксис лямбды может представлять разные типы в зависимости от того, где он используется:
Эта типизация на основе контекста — ключевая особенность поддержки лямбд в Java, которая позволяет писать гибкий и лаконичный функциональный код, сохраняя при этом типобезопасность.
Lambda-выражение имеет внутренний тип, который независим от контекста, в котором оно используется.
Новый — ещё не проверен сообществом
Вы