Предположим, что у меня есть следующий функциональный интерфейс:
public interface TemperatureObserver {
void react(BigDecimal t);
}
а затем в другом классе уже заполненный ArrayList объектов типа TemperatureObserver.
Предполагая, что temp является BigDecimal, я могу вызвать react в цикле, используя:
observers.forEach(item -> item.react(temp));
Мой вопрос: могу ли я использовать ссылку на метод для кода выше?
Не работает следующее:
observers.forEach(TemperatureObserver::react);
Сообщение об ошибке сообщает мне, что
-
forEachвArraylist observersне применим к типуTemperatureObserver::react -
TemperatureObserverне определяет методreact(TemperatureObserver)
Достаточно справедливо, поскольку forEach ожидает в качестве аргумента a Consumer<? super TemperatureObserver>, и мой интерфейс, хотя и функциональный, не соответствует Consumer из-за другого аргумента react (a BigDecimal в моем случае).
Итак, можно ли это решить, или это случай, когда лямбда не имеет соответствующей ссылки метода?