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表达式的代码块中不允许调用接口中定义的默认方法。