请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

正在回答

1回答

张勤一 2020-09-09 13:51:27

春去秋来你好:

    在 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 14:20:29
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信