python属于函数式编程思维,lambda表达式在里面是函数,但是java提倡"万事万物皆对象",借鉴了该写法,但是lambda表达式在java中是对象而不是函数.
public interface MyInterface {
void testMethod();
}
class MyClass implements MyInterface {
@Override
public void testMethod() {
System.out.println("我重写了接口中的testMethod方法!耶!");
}
}
class Test {
public static void main(String[] args) {
//创建接口类的对象
// MyInterface mc=new MyClass();
// mc.testMethod();
//利用匿名内部类,创建接口实现类的对象
MyInterface mif = new MyInterface() {
@Override
public void testMethod() {
System.out.println("利用匿名内部类重写了Method的方法!耶");
}
};
mif.testMethod();
//利用lambda表达式:创建皆苦实现类的对象
MyInterface mif2 = () -> System.out.println("利用lambda表达式重写Method的方法!耶!");
mif2.testMethod();
}
}
2.语法:
Lambda表达式
本质:java中接口的一个实例!(接口的实现类的具体的对象)
-> :箭头操作符 lambda操作符
->左侧:lambda形参列表 等价于 接口中的抽象方法的形参列表
->右侧: 重写方法的方法体的具体内容
总结:
->左面:
(1)参数类型可以省略不写!(类型自动判断)
(2)如果只有一个参数,()可以省略不写
->右面:
(!){}将方法体的具体内容包裹起来
(2)只有一个方法体执行语句的话,{}可以省略不写
(3)如果一句执行语句是return语句,return可以省略不写
3.具体格式:
- 格式1:无参,无返回值;
如果方法体中包含有多个语句,那么->右侧的{}必须要加上;
如果方法体中只有一个语句,那么{}可以省略不写. - 格式2:有一个参数,无返回值
lambda表达式的参数类型可以省略;
如果参数只有一个,那么可以不写括号; - 格式3:有两个或者两个以上的参数,执行语句多条,并且有返回值
- 多个参数的时候()不能省略
- 多个执行语句{}不能省略
- 方法体就一句话,并且这一句话是:return+返回值;那么return和{}都可以省略不写
既然lambda表达式是接口的实现类的对象,对该接口有什么要求吗?
要求这个接口必须只有一个抽象方法,只有一个抽象方法的接口叫做函数式接口.
函数式接口:
(1)只有一个抽象方法
(2)jdk8以后可以有非抽象方法
IDEA配置lambda表达式