Почему метод forEach в Collection и Stream успешно принимает Function.Identity, даже если это не тип Consumer?
IntStream is = IntStream.of(1,2,3);
IntUnaryOperator un = IntUnaryOperator.identity();
is.forEach(s -> un.applyAsInt(s));
Метод forEach может принимать только потребителя в качестве аргумента, тогда как он успешно компилируется с методом метода applyAsInt, который возвращает int?
Кто-нибудь может пожалуйста объяснить причину этого?
2 ответа
Решение
Код в вопросе
is.forEach(s -> un.applyAsInt(s));
также может быть представлен как:
is.forEach(new IntConsumer() {
@Override
public void accept(int s) {
un.applyAsInt(s); // return type ignored
}
});
который может помочь вам понять, что, несмотря на applyAsInt
возврате int
возвращаемое значение игнорируется в течениеforEach
,