6.8.4 Lambda表达式与匿名内部类的联系和区别
6.8.4 Lambda表达式与匿名内部类的联系和区别
Lambda
表达式是匿名内部类的一种简化,因此它可以部分取代匿名内部类的作用, Lambda
表达式与匿名内部类存在如下相同点。
Lambda
表达式与匿名内部类
一样,都可以直接访问"effectively final"
的局部变量,以及外部类的成员变量
(包括实例变量和类变量)Lambda
表达式创建的对象与匿名内部类生成的对象一样,都可以直接调用从接口中继承的默认方法。
1 |
|
Lambda
表达式的代码块
与匿名内部类的方法体
是相同的。- 与匿名内部类相似的是,由于
Lambda
表达式访问了book
局部变量,因此该局部变量
相当于有隐式的final
修饰,因此同样不允许对book
局部变量重新赋值。 - 程序使用
Lambda
表达式创建的对象不仅可调用接口中唯一的抽象方法,也可调用接口中的默认方法。
Lambda表达式和匿名内部类的区别
Lambda
表达式与匿名内部类主要存在如下区别。
- 匿名内部类可以为任意接口创建实例,不管接口包含多少个抽象方法,只要匿名内部类实现所有的抽象方法即可;但**
Lambda
表达式只能为函数式接口创建实例** - 匿名内部类可以为
抽象类
甚至普通类
创建实例;但Lambda
表达式只能为函数式接口创建实例。 - 匿名内部类实现的抽象方法的
方法体
中允许调用接口中定义的默认方法;但Lambda
表达式的代码块
中不允许调用接口中定义的默认方法。