第42条:Lambda优先于匿名类

本节作者主要是介绍了lambda 的来历、优势以及使用时的一些注意事项。


  • 来历:
    在java8之前,创建函数对象都是通过匿名类。但是匿名类的代码太过繁琐,从编写和可读性上都不便于推广。于是在java8中引入了lambda 表达式来实现函数式接口(带有单个抽象方法的接口)。

  • 优势
    可见lambda 表达式就是为了解决匿名类不抑郁编写和可读性差的问题引入的。使用lambda 表达式可以简化再创建函数式接口时的代码。lambda表达式可以省略参数和返回值的类型,因为编译器会通过类型推断 推导出来。(不能推导出来的时候需要指明)
    因此在java8之后,lambda 就成了表示小函数对象的最佳方式。

  • 注意事项

    • 由于lambda是没有名字和文档的,如果一个计算不是自解释的,或是行数较多(对于lambda来说一行最好,三行最多),就不要放在lambda中了,推荐重构为新的方法。
    • 在枚举类中使用时:通过enum构造传入的参数是在静态环境的,所以从enum构造传入的lambda不能访问枚举的成员变量
    • 虽然lambda 是匿名类在创建简单函数式方法时的优化,但是有些场景只能使用匿名类:

1、抽象类或接口有多个需要覆盖的方法
2、需要引用自身时,lambda 无法获得对自身的引用,this 指的还是外围实例.
而匿名类可以,匿名类中的this 指的是匿名类实例自身。


lambda表达式在实践中使用的很多,用法基本也都了解。读完这部分最大的收货其实是回忆起了在一些特殊的场景下,还是只能使用匿名类。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容