提示四十二
2022-08-09 本文已影响0人
飞絮搅青冥
提示四十二:lambda 表达式优于匿名类。
- 匿名类适用于需要函数对象的经典面向对象设计模式,特别是策略模式。
- Lambdas 在功能上与匿名类相似,但更为简洁。
- Lambda表达式可以省略参数和返回值的类型,这是因为编译器会通过类型推断推导出来。(不能推导出来的时候需要指明)
- lambdas 使得使用函数对象在以前没有意义的地方非常实用。
- lambda 没有名称和文档; 如果计算不是自解释的,或者超过几行,则不要将其放入 lambda 表达式中。
- Lambdas 与匿名类共享无法可靠地序列化和反序列化实现的属性。
- 以下情况仍需要使用匿名类:
1.想创建抽象类的实例。
2.多个抽象方法的接口创建实例。
3.需要从函数对象主体内部访问它,需要使用匿名类,因为lambda的this指外围实例。
lambda其实也就是java8包装的语法糖,可以让我们更加方便容易得编写函数式的代码。记得以前我们项目还没有升级java8的时候,系统中为了复用一下函数,使用了guava相关的包,由于原生不够支持,所有的函数基本都需要使用匿名类来编写,会让代码冗长又难以阅读。现在换了lambda,其实本质还是一样,我们在编写代码的时候还是需要注意简洁和容易阅读,所以遇到很长的lambda表达式的时候最好还是要抽一些方法出来,让变量名来更直观表示代码含义。