本节作者主要是介绍了lambda 的来历、优势以及使用时的一些注意事项。
来历:
在java8之前,创建函数对象都是通过匿名类。但是匿名类的代码太过繁琐,从编写和可读性上都不便于推广。于是在java8中引入了lambda 表达式来实现函数式接口(带有单个抽象方法的接口)。优势
可见lambda 表达式就是为了解决匿名类不抑郁编写和可读性差的问题引入的。使用lambda 表达式可以简化再创建函数式接口时的代码。lambda表达式可以省略参数和返回值的类型,因为编译器会通过类型推断 推导出来。(不能推导出来的时候需要指明)
因此在java8之后,lambda 就成了表示小函数对象的最佳方式。-
注意事项
- 由于lambda是没有名字和文档的,如果一个计算不是自解释的,或是行数较多(对于lambda来说一行最好,三行最多),就不要放在lambda中了,推荐重构为新的方法。
- 在枚举类中使用时:通过enum构造传入的参数是在静态环境的,所以从enum构造传入的lambda不能访问枚举的成员变量
- 虽然lambda 是匿名类在创建简单函数式方法时的优化,但是有些场景只能使用匿名类:
1、抽象类或接口有多个需要覆盖的方法
2、需要引用自身时,lambda 无法获得对自身的引用,this 指的还是外围实例.
而匿名类可以,匿名类中的this 指的是匿名类实例自身。
lambda表达式在实践中使用的很多,用法基本也都了解。读完这部分最大的收货其实是回忆起了在一些特殊的场景下,还是只能使用匿名类。