Lambda表达式是JDK8开始后的一种新语法形式
java中使用Lambda表达式是为了简化匿名内部类的代码形式
Lambda表达式适用于单接口匿名类(接口中只有一个抽象方法的匿名内部类)
以下是Lambda表达式简化匿名内部类的格式
(匿名内部类被重写方法的形参列表) -> {
被重写方法的方法体
}
// -> 是语法形式,无实际意义
注意:Lamdba表达式只能简化函数式接口的匿名内部类的写法形式
函数式接口:
1.必须是接口
2.接口中只有一个抽象方法
3.一般可以加上@FunctionalInterface注解,来声明这是函数式接口
Lamdba表达式的省略规则:
1.参数类型可以不写
2.如果只有一个参数,参数类型可以省略,括号()也可以省略
3.如果Lambda表达式的方法体代码只有一行,可以省略大括号{},同时必须省略分号;
4.如果Lambda表达式的方法体代码只有一行,并且这行代码是retrun语句,可以省略retrun,同时省略大括号{},分号;
以下是Lambda表达式的使用案例:
package com.lambda;
/**
* @Time: 2022/4/4 20:14
* @Author: 宁洪康
* @Package: com.lambda
* @File: LambdaDemo2.java
* @Software: IntelliJ IDEA
*/
public class LambdaDemo2 {
public static void main(String[] args) {
// 目标学会使用Lambda的标准格式简化匿名内部类的代码形式
// Lambda只能简化接口中只有一个抽象方法的匿名内部类形式
Swimming s1 = new Swimming() {
@Override
public void swim() {
System.out.println("老师游泳贼溜~~~~~");
}
};
go(s1);
System.out.println("--------");
// 使用Lambda表达式简化
Swimming s2 = () -> {
System.out.println("老师游泳贼溜~~~~~");
};
go(s2);
System.out.println("--------");
// 一种更为紧凑的模式
go(() -> {
System.out.println("老师游泳贼溜~~~~~");
});
}
public static void go(Swimming s) {
System.out.println("开始。。。");
s.swim();
System.out.println("结束。。。");
}
}
@FunctionalInterface
// 一旦加上这个注释必须是函数是接口(里面只有一个抽象方法)
interface Swimming {
void swim();
}
总结:
Lambda表达式基本作用?
简化函数式接口的匿名内部类的写法
Lambda表达式使用要注意什么?
必须是接口的单接口匿名内部类
Lambda表达式的好处
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁、更灵活的代码,同时使代码风格更加紧凑,使Java语言表达能力得到了提升
声明:本章节的代码参考自黑马程序员