Найти в Дзене
DEBAGanov

Java 517. Как компилятор определяет возвращаемый тип лямбда-выражения?

В Java компилятор определяет возвращаемый тип лямбда-выражения на основе контекста, в котором оно используется.

Если лямбда-выражение используется в контексте, требующем значения определенного типа, то компилятор автоматически выводит тип возвращаемого значения лямбда-выражения из контекста.

Например, если мы хотим отфильтровать массив строк с помощью лямбда-выражения, возвращающего значения типа boolean, компилятор автоматически выводит этот тип:

String[] words = {"foo", "bar", "baz"};
List<String> shortWords = Arrays.stream(words)
.filter(s -> s.length() < 4)
.collect(Collectors.toList());

Здесь лямбда-выражение s -> s.length() < 4 имеет возвращаемый тип boolean, который компилятор выводит из типа метода filter, который требует параметр типа Predicate.

Если лямбда-выражение используется в контексте, где не требуется явное указание типа, компилятор использует правила вывода типов для определения возвращаемого типа. Если лямбда-выражение может быть преобразовано к различным функциональным интерфейсам, компилятор выберет наиболее подходящий интерфейс с учетом сигнатуры лямбда-выражения.

Например, если мы хотим удвоить каждый элемент массива строк с помощью лямбда-выражения, возвращающего значения типа String, компилятор автоматически выводит этот тип:

String[] words = {"foo", "bar", "baz"};
List<String> doubledWords = Arrays.stream(words)
.map(s -> s + s)
.collect(Collectors.toList());

Здесь лямбда-выражение s -> s + s имеет возвращаемый тип String, который компилятор выводит из типа метода map, который требует параметр типа Function<String, R>.

В целом, компилятор определяет возвращаемый тип лямбда-выражений на основе контекста и использует правила вывода типов для выбора наиболее подходящего функционального интерфейса.

1606 вопрос-ответ по Java

Курс Spring Framework

Tелеграмм каналDEBAGanov

Мое резюмеDEBAGanov

Если вам понравилось, буду признателен за подписку.