Жизненный цикл компонента Spring документация часто упоминает callback methods.
Пытаясь понять значение обратного вызова, я наткнулся на несколько ссылок, в которых упоминается, что он передает одну функцию в качестве аргумента другой, что может быть достигнуто через интерфейсы в Java.
Я запутался, если это обратный вызов, то что такое лямбда-выражение и функциональные интерфейсы? Они такие же или разные?
@dbl Я просмотрел большинство ответов не только на этот, но и на другие вопросы. Они либо упоминают обратный вызов для C++ и JavaScript, либо, в случае Java, не упоминают никаких различий или сходства с лямбда.
@SameerSinha, не поймите меня неправильно, я имел в виду, что вы должны правильно сформулировать свой вопрос. Поскольку у нас уже есть ответ, мой запрос, вероятно, бессмыслен ... Мой голос против заблокирован, пока вы, конечно, не отредактируете.
@dbl Редактирование вопроса ничего не дало. Как увидеть, что по вопросам проголосовали против (и, если возможно, удалить его). Я новичок в ТАК.
@SameerSinha Я снял свой голос против.




Лямбда-выражения - это один из нескольких способов реализации функциональных интерфейсов.
Функциональные интерфейсы используются как обратные вызовы, но не все обратные вызовы являются функциональными интерфейсами. Интерфейсы, используемые в качестве обратных вызовов, могут иметь несколько абстрактных методов, в то время как функциональные интерфейсы могут иметь только один абстрактный метод.
Обратный вызов - это шаблон, при котором вы куда-то передаете функцию, и она вызывается позже.
Функциональные интерфейсы - это способ указать, какую функцию вы ожидаете.
Лямбда - это быстрый способ реализации функционального интерфейса. Лямбды полезны, если вы хотите использовать обратные вызовы.
Например:
Предположим, я собираюсь создать сообщение в какой-то момент в будущем, и вы хотите, чтобы вам сказали, когда это произойдет. У меня есть метод, который позволяет мне вызывать функцию, когда сообщение готово.
public void callThisWithMessage(Consumer<String> messageConsumer);
Вы даете мне потребителя сообщения, и я позвоню ему позже, когда сообщение будет готово. Это пример Перезвоните.
Тип функции, которую вы можете дать мне здесь, определяется интерфейсом Consumer, который является функциональный интерфейс. Этот конкретный функциональный интерфейс говорит, что у него есть метод, который принимает параметр (в данном случае строку).
Если вы хотите использовать мою службу обратного вызова, вы можете реализовать потребителя с помощью лямбда-функция.
callThisWithMessage(msg -> System.out.println("Message received: "+msg));
Это создает лямбда-функцию, которая реализует функциональный интерфейс Consumer<String>, и передает ее моему методу для последующего Перезвоните.
Этот ответ очень хорош, но я думаю, что ответ @Eran немного лучше, потому что, на мой взгляд, обратные вызовы - это не только «шаблон, в котором вы передаете функцию ...», мы могли бы передать экземпляр интерфейса, который имеет несколько абстрактных методов также, и тогда обратный вызов может использовать все или некоторые из этих методов в своей реализации.
Обратный вызов - это шаблон, в котором вы куда-то передаете функцию, и она вызывается позже. Функциональные интерфейсы - это способ указать, какую функцию вы ожидаете. Лямбда - это быстрый способ реализации функционального интерфейса. Лямбды полезны, если вы хотите использовать обратные вызовы.