Java Lambda 表达式
简介
Lambda 表达式是 JDK 8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。但 Lambda 表达式并不能取代所有的匿名内部类,只能用来取代函数接口(Functional Interface)的简写。
语法
Lambda 表达式由三部分组成:
-
参数列表
-
箭头
-
主体
有两种风格,分别是:
-
表达式-风格
(parameters) -> expression
-
块-风格
(parameters) -> { statements; }
其中,()
用来描述参数列表,{}
用来描述方法体,->
为 lambda运算符,读作:goes to
。
Java 8 中内部类或者 Lambda 表达式对外部类变量的引用条件放松了,不要求强制的加上 final 关键字了,但是 Java 8 中要求这个变量是 effectively final。
区别
匿名内部类与 Lambda 表达式的区别:
-
所需类型不同
匿名内部类:可以是接口、抽象类、具体类。Lambda 表达式:只能是接口。
-
使用限制不同
如果接口中有且仅有一个抽象方法,可以使用 Lambda 表达式,也可以使用匿名内部类。如果一个接口中有多个抽象方法,只能使用匿名内部类,而不能使用 Lambda 表达式。
-
实现原理不同
匿名内部类虽然跟使用 Lambda 表达式效果一样,但是 Lambda 表达式编译后,会自动多生成一个
.class
字节码文件。
参考: