简介
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
作用
使用lambda表达式可以避免匿名内部类定义过多,使得代码看起来更加简洁,去掉了一堆没有意义的代码,只留下了核心逻辑。
发展历程
对于这种一般只用一次的类,为了使得代码更加简洁,经历了以下过程:
普通实现类:最原始的方法,定义了抽象接口之后,定义一个接口的实现类,再new一个对象,再调用对象的方法。
静态内部类: 可以把这个接口的实现类定义到需要用到的类的内部,类前面加上static,为静态内部类
局部内部类:可以把这个接口的实现类定义到需要用到的类的方法内部,为局部内部类
匿名内部类:虽然这个接口有实现类,但是这个类没有名字,只能通过接口或者父类来new这个实现类的对象。
java1
2
3
4
5
6
7>接口 变量 =new 接口(){
接口中的方法实现
>}
>//在作为参数时
>new 接口(){}lambda表达式:观察到匿名内部类还有继续简化的空间,比如接口 写了两次,还有一个繁琐的new关键字,lambda做了如下优化。因为函数式接口里面只有一个方法,所以{ }里面直接写的就是那个方法的实现。
接口 变量 =()-> { }
如果只有一行
return xxx
的代码,完全可以用更简单的写法.