深刻理解Lambda表达式,使用接口抽象方法的缩写
@FunctionalInterface
public interface MyInterface {
void print();
}
当函数式接口MyInterface充当了某个方法的参数时,使用此方法有以下几种方式
- 1)新建一个类,实现此接口然后重写其抽象方法,然后创建这个类的对象,并调用该方法
- 2)匿名内部类,重写抽象方法
- 3)lamda表达式实现接口的抽象方法
Lambda表达式可以看作是一种简化的匿名函数,通过Lambda表达式可以直接定义接口的实例,而无需显式地编写新的类来实现接口。在代码执行时,Spring容器会根据Lambda表达式来实例化一个接口的对象,并使用该对象重写的方法。因此,Lambda表达式仅仅是写代码形式上的简化,而非代码执行上的简化
。
Lambda表达式执行时一定是会创建对应接口的实例,并使用该实例调用其方法。
其好处在于:通过Lambda表达式可以省略:创建实现接口的类,实例化对象,使用对象调用抽象方法等一系列繁琐的写法
,让编程人员关注重写的抽象方法即可。
关于Lambda表达式的展现形式,在此就不做赘述了,仅仅是形式上的问题 (左边为抽象方法的参数 -> 右边为抽象方法的方法体
),本文旨在理解lambda的意义。
综上所述,Lambda表达式————就是使用接口抽象方法的缩写
。
个人思考
Lambda表达式接口的实例是通过Spring容器自动配置来进行注入的,由于Lambda表达式是一个匿名的、临时的实现,因此无法直接确定它的具体类名。
由此我们可以更加深刻地理解interface与class的区别,interface的实例意义是工具人,生命周期很短,即用即丢,关注的是其抽象方法的具体行为。class的实例意义则根据其定义决定,生命周期可长可短,通常我们不仅关注其行为(方法),更关注其属性(成员变量)。