春去秋来你好:
在 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!共同建造、维护这门课程,我需要每一个你!