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