Java Lambda表达式与匿名内部类的联系和区别
Lambda表达式和匿名内部类都可以用来创建函数式接口的实例,但它们之间有一些联系和区别。
联系:
1. 语法相似:Lambda表达式和匿名内部类都使用了类似的语法,都是在需要使用接口的地方,创建了接口的实例。
2. 都可以访问外部变量:Lambda表达式和匿名内部类都可以访问外部的局部变量,但有一些细微的不同。
区别:
1. 语法简洁性:Lambda表达式相对于匿名内部类来说,语法更加简洁明了,特别是对于函数式接口的实现,可以减少代码的书写量。
2. 编译方式:匿名内部类在编译器编译时会生成一个新的类文件,而Lambda表达式则不会,它们依赖于invokeDynamic指令在运行时进行动态绑定。
3. 类型推断:Lambda表达式可以通过类型推断自动推断出参数的类型,而匿名内部类需要显式指定参数类型。
4. 唯一性:匿名内部类每次创建时都会产生一个新的实例,而Lambda表达式可以复用已有的函数式接口的实例。
总的来说,Lambda表达式相对于匿名内部类来说,具有更好的语法简洁性和更高的执行效率,但在一些特殊情况下,匿名内部类可能仍然是更合适的选择。