函数式接口和lambad表达式有什么关系?

来源:3-11 lambda和Stream真的高效吗?

春去_秋来

2020-09-09

函数式接口和lambad表达式有什么关系?

写回答

1回答

张勤一

2020-09-09

春去秋来你好:

    在 java 中,lambda 表达式与函数式接口是不可分割的,都是结合起来使用的。

    对于函数式接口,我们可以理解为只有一个抽象方法的接口,除此之外它和别的接口相比并没有什么特殊的地方。为了确保函数式接口的正确性,我们可以给这个接口添加 @FunctionalInterface 注解(当然,也可以不加此注解),这样当其中有超过一个抽象方法时就会报错。

    对于其他类型的接口,我们想要使用就需要定义一个类(或者使用匿名类)来实现那个接口和其中的方法,而函数式接口除了使用普通的方法来实现之外,还有一种更加简单的方法—就是使用 lambda 表达式。lambda 表达式我们可以理解对于函数式接口和其中的抽象方法的具体实现,这样当有一个需要函数式接口参数的方法时,我们就可以给其传递一个对应的 lambda 表达式作为参数。执行的时候就会自动执行函数式接口中的唯一方法,也就是传递过去的 lambda 表达式了。

    所以,总结下来说:Lambda 表达式就是函数式接口(FunctionalInterface)实现的快捷方式,它相当于函数式接口实现的实例,因为在方法中可以使用 Objec t作为参数,所以把 Lambda 表达式作为方法的参数也是可以的。

    下面,可以看一个例子。首先,我们定义一个函数式接口:

@FunctionalInterfacepublic interface Calculator { 
    double calculate(int a, int b); 
}

    使用 lambda 表达式:

Calculator division  = (int a, int b) -> (double) a / b;
System.out.println(division.calculate(5, 2));         // prints 2.5

    理论理解起来确实会有一定的难度,尝试着去写一写简单的 demo,然后应用到实际的企业级开发中,逐渐的走向熟练,你会发现,不知不觉就搞明白了。


    我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!

2
1
春去_秋来
非常感谢!
2020-09-09
共1条回复

Java实操避坑指南 SpringBoot/MySQL/Redis错误详解

掌握业务开发中各种类型的坑,,Java web开发领域通用

466 学习 · 204 问题

查看课程