Lambda表达式

// 函数式接口
@FunctionalInterface 
public interface MyInterface { 
    void print(); 
}

当函数式接口MyInterface充当了某个方法的参数时,使用此方法有以下几种方式

  1. 新建一个类,实现此接口然后重写其抽象方法,然后创建这个类的对象,并调用该方法

  2. 匿名内部类,重写抽象方法

  3. lamda表达式实现接口的抽象方法

Lambda表达式可以看作是一种简化的匿名函数,通过Lambda表达式可以直接定义接口的实例,而无需显式地编写新的类来实现接口。在运行时(Runtime),JVM会根据Lambda表达式来实例化一个接口的对象,并使用该对象重写的方法。

Lambda表达式仅仅是写代码形式上的简化,而非代码执行上的简化

Lambda表达式的展现形式

抽象方法的参数 -> 抽象方法的方法体

通过Lambda表达式可以省略:创建实现接口的类,实例化对象,使用对象调用抽象方法等一系列繁琐的写法,让编程人员关注重写的抽象方法即可,简而言之——使用接口抽象方法的缩写。

延展性总结

Lambda 表达式的实例是在 JVM (Java 虚拟机) 运行时自动生成(JVM 会动态地生成一个实现相应函数式接口的类,并创建该类的实例)

由此我们可以更加深刻地理解interface与class的区别,interface的实例意义是工具人,生命周期很短,即用即丢,关注的是其抽象方法的具体行为。

class的实例意义则根据其定义决定,生命周期可长可短,通常我们不仅关注其行为(方法),更关注其属性(成员变量)。


Comments