是什么?
- 我理解的lambda表达式,就是Java支持函数式编程的方式;
- 从表现上来看就是支持“提供入参(或者无参),执行指定逻辑”的代码块
- 它可以用来表示“实现了只包含一个抽象方法接口(函数式接口)的类的实例对象”
- 在方法中编写的lambda表达式,就像是在方法中,再嵌套一个临时方法一样(不代表真实情况)
解决了什么问题
- 因为Java是一门面向对象语言,所有的方法、变量等等都基于类;
- 在不支持lambda表达式之前,如果要获得实现某个函数式接口的类的对象时,就需要:先定义一个类,声明它实现了这个接口,然后再重写接口的方法,再调用类的构造器获取这个类的对象,非常繁琐!
- 而lambda表达式的出现就是为了解决这个问题,它可以转换成函数式接口,让代码变得更加简洁
- 解决这个问题的另一种方式是“通过匿名类来实现”,匿名类本质是编译器在底层创建了个类,并且实现了这个接口,其方法即是在定义匿名类时覆盖接口的方法;只是从写法上看,定义匿名类没有lambda表达式那么简洁
如何实现
- 从底层来看,lambda表达式实际上也是编译器行为,在对lambda表达式进行编译时,会根据其表达式内容生成一个私有的静态方法,并通过一个内部类来包含它,而后再根据内部类的规则进行解析(实现指定接口的内部类);
- 所有从底层实现方式来看,其实lambda表达式和上面的匿名内部类实现方法相类似,只是多了一个先解析为内部类的步骤