Лямбда-тело не выполняется, если не вызван соответствующий метод - PullRequest
0 голосов
/ 26 января 2019

Я изучаю Java-лямбды и спрашиваю себя, всегда ли нужно вызывать абстрактный метод функционального интерфейса, если я хочу использовать здесь лямбду?

@FunctionalInterface
public interface A {
    public void somefunction();
}

@FunctionalInterface
public interface B extends A {

}

public class testing {
    public static void main(String[] args) {
        B b = () -> System.out.println("MyText");

        b.somefunction();   //Why do I need to call somefunction()
    }
}

Если я не пишу b.somefunction(); Я не получаю никакого вывода, даже если компилятор не выдает ошибку.

Я не передаю никакое значение методу, так зачем мне вызывать абстрактный метод?

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

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Если вы хотите, чтобы вывод печатался при запуске вашей программы, напишите:

public class testing {
    public static void main(String[] args) {
        System.out.println("MyText");
    }
}

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

class Testing {
    public static void main(String[] args) {
        runn(() -> System.out.println("MyText"), 10);
    }
    static runn(Runnable task, int times) {
        for (int i = 0; i < times; ++i) {
            task.run();
        }
    }
}

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

0 голосов
/ 26 января 2019

Функциональный интерфейс служит для обеспечения

  1. определения того, что должно быть выполнено для данного вызова, и
  2. для определения , когда этобыть вызванным.

Обычно вы определяете «лямбда-объект», как вы это сделали, а затем передаете его куда-то еще, чтобы сказать, что делать при определенных обстоятельствах.Если вы хотите увидеть это таким образом, это своего рода обратный вызов.

Объект, которому вы передаете этот объект, вызывает / использует его, когда видит время для этого, или вы делаете это сами, как вы это делаетеэто в вашем примере.

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