Java Lambda 表达式

发布时间 2024-01-05 22:49:45作者: LARRY1024

简介

Lambda 表达式是 JDK 8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的Java代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。但 Lambda 表达式并不能取代所有的匿名内部类,只能用来取代函数接口(Functional Interface)的简写。

语法

Lambda 表达式由三部分组成:

  • 参数列表

  • 箭头

  • 主体

image

有两种风格,分别是:

  • 表达式-风格

    (parameters) -> expression

  • 块-风格

    (parameters) -> { statements; }

其中,() 用来描述参数列表,{} 用来描述方法体,-> 为 lambda运算符,读作:goes to

Java 8 中内部类或者 Lambda 表达式对外部类变量的引用条件放松了,不要求强制的加上 final 关键字了,但是 Java 8 中要求这个变量是 effectively final。

区别

匿名内部类与 Lambda 表达式的区别:

  • 所需类型不同

    匿名内部类:可以是接口、抽象类、具体类。Lambda 表达式:只能是接口。

  • 使用限制不同

    如果接口中有且仅有一个抽象方法,可以使用 Lambda 表达式,也可以使用匿名内部类。如果一个接口中有多个抽象方法,只能使用匿名内部类,而不能使用 Lambda 表达式

  • 实现原理不同

    匿名内部类虽然跟使用 Lambda 表达式效果一样,但是 Lambda 表达式编译后,会自动多生成一个 .class 字节码文件。


参考: