除非调用相应的方法,否则不会执行Lambda正文

时间:2019-01-26 15:24:38

标签: java lambda java-8

我正在学习Java Lambda,我问自己是否要在这里使用lambda,总是需要调用函数接口的抽象方法吗?

@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 :(得分:3)

如果要在程序运行时打印输出,请输入:

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

如果您希望在运行某些其他功能时输出输出,则可以使用lambda:

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();
        }
    }
}

存在Lambda可以简化指定要委托其执行到另一个实体的函数。调用lambda时,其参数及其结果的处理方式取决于其他人。

答案 1 :(得分:2)

功能界面可提供一种方式

  1. 定义将在给定呼叫上执行的操作,
  2. 定义何时被调用。

通常,您会像定义的那样定义一个“ lambda对象”,然后将其传递到其他地方以告知在特定情况下该怎么做。如果您希望以这种方式看到它,那是一种回调。

传递该对象的实体会在有时间的时候调用/使用它,或者您可以自己使用它,如您在示例中所做的那样。