Java 8: вывод типа завершается неудачно при сопоставлении объектов со ссылками на методы
У меня есть массив объектов классов, которые расширяют этот абстрактный класс в переменной handlers
:
public abstract class RequestHandler {
public boolean handleGet(final HttpServletRequest request, final HttpServletResponse response) {
return true;
}
public boolean handlePost(final HttpServletRequest request, final HttpServletResponse response) {
return true;
}
public boolean handlePut(final HttpServletRequest request, final HttpServletResponse response) {
return true;
}
public boolean handleDelete(final HttpServletRequest request, final HttpServletResponse response) {
return true;
}
public boolean handleTrace(final HttpServletRequest request, final HttpServletResponse response) {
return true;
}
public boolean handleOptions(final HttpServletRequest request, final HttpServletResponse response) {
return true;
}
public boolean handleConnect(final HttpServletRequest request, final HttpServletResponse response) {
return true;
}
public boolean handlePatch(final HttpServletRequest request, final HttpServletResponse response) {
return true;
}
}
Теперь я хочу сопоставить эту коллекцию со списком BiFunction:
final List<BiFunction<HttpServletRequest, HttpServletResponse, Boolean>> getHandlers = Arrays.stream(handlers)
.<BiFunction<HttpServletRequest, HttpServletResponse, Boolean>>map(handler -> handler::handleGet)
.collect(Collectors.toList());
И если я удалю явную спецификацию универсального типа:
final List<BiFunction<HttpServletRequest, HttpServletResponse, Boolean>> getHandlers = Arrays.stream(handlers)
.map(handler -> handler::handleGet)
.collect(Collectors.toList());
Я получаю ошибку компиляции в handler::handleGet
:
Объект не является функциональным интерфейсом
Почему компилятор правильно не выводит тип здесь? Спасибо!