Как реализовать функции высшего порядка в Java?

У меня есть класс, большая часть методов отличается только вызовом разных функций в одной и той же точке:
public MatrixDto getContent (...) {
...
        final List<Content> list = <b>contentDao.x(a, b);</b>
...
        return matrixDto;
}

В данном примере это функция contentDao.x(a,b). Я хочу заменить все эти функции одной функцией высшего порядка, которая могла бы принимать на вход нужную функцию, и подставлять её на место contentDao.x(). Можно ли это как-то реализовать в Java?
Примечание: менять реализацию функции x() я не могу, поскольку она является интерфейсом MyBatis
  • Вопрос задан
  • 5290 просмотров
Пригласить эксперта
Ответы на вопрос 2
apangin
@apangin
Через интерфейсы, например, Callable.
public MatrixDto getContent(Callable<List<Content>> function) {
    ...
    final List<Content> list = function.call();
    ...
}

// а вызывать так:
getContent(new Callable<List<Content>>() {
    public List<Content> call() { return contentDao.x(a, b); }
});
Ответ написан
alexeygrigorev
@alexeygrigorev
Переворачиватель пингвинов
Посмотрите в Google Guava docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Function.html

Хотя я все чаще считаю, что функции высшего порядка в джаве ни к чему хорошему не приведут, только захламлят код из-за многословности языка. Почти всегда императивный код в джаве выглядит лучше и понятнее, чем т.н. «функциональный».

Попробуйте сравнить, и вы поймете. Мессиво из анонимных классов — не самый лучший код для чтения и понимания.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы