обратный вызов против лямбды в Java - PullRequest
0 голосов
/ 14 сентября 2018

Жизненный цикл бобов документация часто упоминается callback methods.

Пытаясь найти значение обратного вызова, я натолкнулся на несколько ссылок, в которых упоминается, что это передача одной функции в качестве аргумента другой, что может быть достигнуто с помощью интерфейсов в Java.

Iя в замешательстве, если это обратный вызов, тогда каковы лямбда-выражения и функциональные интерфейсы?Они одинаковые или разные?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Обратный вызов - это шаблон, где вы передаете функцию куда-то, и она вызывается позже.

Функциональные интерфейсы - это способ указать, какую функцию вы ожидаете.

Лямбда - это быстрый способ реализации функционального интерфейса. Лямбды полезны, если вы хотите использовать обратные вызовы.


Например:

Предположим, я получу сообщение, и вы хотите знать, когда это произойдет. У меня есть метод, который позволяет вам дать мне функцию для вызова, когда приходит сообщение.

public void callThisWithMessage(Consumer<String> messageConsumer);

Вы даете мне получателя сообщения, и я позвоню ему позже, когда придет сообщение. Это называется обратный вызов .

Тип функции, которую вы можете дать мне здесь, определяется интерфейсом Consumer, который является функциональным интерфейсом . Интерфейс говорит, что у него есть метод, который принимает параметр (в данном случае строку).

Если вы хотите использовать мою службу обратного вызова, вы можете реализовать потребителя с помощью лямбда-функции .

callThisWithMessage(msg -> System.out.println("Message received: "+msg));

Это создает лямбда-функцию, которая реализует функциональный интерфейс Consumer<String>, и передает ее методу для callback .

0 голосов
/ 14 сентября 2018

Лямбда-выражения являются одним из нескольких способов реализации функциональных интерфейсов.

Функциональные интерфейсы используются в качестве обратных вызовов, но не все обратные вызовы являются функциональными интерфейсами. Интерфейсы, используемые в качестве обратных вызовов, могут иметь несколько абстрактных методов, в то время как функциональные интерфейсы могут иметь только один абстрактный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...