Lambda概述
- 简化匿名内部类的代码方法(JDK8)
- Lambda表达式只能简化函数式接口的匿名内部类的写法形式
函数式接口
- 首先必须是接口,其次接口中有且仅有一个抽象方法的形式
- 通常我们会在接口上加上一个@FunctionlInterface注解,标记该接口必须是满足函数式接口
Lambda表达式的简化格式
(匿名内部类被重写方法的形参列表)->{
被重写方法的方法体代码
}
//->是语法形式,无实际含义
代码展示
public static void main(String[] args) {
x(()->{
System.out.println("跑步");
});
}
public static void x(Person p){
System.out.println("开始");
p.run();
System.out.println("结束");
}
}
interface Person{
void run();
}
等价于
public static void main(String[] args) {
Person p = new Person() {
@Override
public void run() {
System.out.println("跑步");
}
};
x(p);
}
public static void x(Person p){
System.out.println("开始");
p.run();
System.out.println("结束");
}
}
interface Person{
void run();
}
等价于
public static void main(String[] args) {
Person p = ()->{
System.out.println("跑步");
};
x(p);
}
public static void x(Person p){
System.out.println("开始");
p.run();
System.out.println("结束");
}
}
interface Person{
void run();
}
总结
Lambda表达式的基本作用?
- 简化函数式接口的匿名内部类的写法
Lambda表达式有什么前提使用?
- 必须是接口的匿名内部类,接口中只能有一个抽象方法
Lambda表达式的好处?
- Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更整洁,更灵活的代码,作为一种更紧凑的代码风格,使Java语言表达能力得到提升
Lambda表达式的省略写法
进一步在Lambda表达式的基础上继续简化
- 参数类型可以省略不写。
- 如果只有一个参数,参数类型可以省略,同时()也可以省略。
- 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写,同时要省略分号!
- 如果Lambda表达式的方法体代码只有一行代码。可以省略大括号不写。此时,如果这行代码是return
- 语句,必须省略return不写,同时也必须省略";"不写