Предположим, что у меня есть следующий функциональный интерфейс:
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
в моем случае).
Итак, можно ли это решить, или это случай, когда лямбда не имеет соответствующей ссылки метода?