美文网首页
Effective Java - Lambda优先于匿名类

Effective Java - Lambda优先于匿名类

作者: DZQANN | 来源:发表于2022-07-10 22:13 被阅读0次

    第42条 Lambda优先于匿名类

    1. 匿名类很适合经典的需要函数对象的设计模式,比如策略模式。比如Comparator提供了抽象策略,匿名类实现具体策略
    2. Lambda表达式可以省略参数和返回值的类型,这是因为编译器会通过类型推断(type inference)推导出来。(不能推导出来的时候需要指明)
    3. 由于lambda是没有名字和文档的,如果一个计算不是自解释的,或是行数较多(对于lambda来说一行最好,三行最多),就不要放在lambda中了
    4. 通过enum构造传入的参数是在静态环境的,所以从enum构造传入的lambda不能访问枚举的成员变量
    5. 只能使用匿名类的场景:
      • 抽象类或接口有多个需要覆盖的方法
      • 需要引用自身(Lambda中的this指的还是enclosing instance)

    思考

    这一条主要讲的还是Lambda的使用。感觉Lambda相比于匿名类,可能仅有的优势就是简洁。所以就像第3点提到的,Lambda表达式里面的内容不宜过长,不然其实不如直接使用匿名类来的清晰,使用匿名类还可以将一个大方法拆分成小方法,可读性更强。

    开发中有的时候很容易把Stream里面的map写成一个有点长的Lambda表达式,在整个Stream里面就显得非常另类,一般这种情况我会把这个map里面的内容单独抽出来一个方法,保证Lambda里面只有一行。

    使用Lambda还有一个需要注意的点是对于参数的命名,比如我就很喜欢把map里面的参数叫做eMapforEach写成map.forEach((k, v) -> {}),这种写起来很简单,但是参数的可读性非常查了,在使用Lambda的时候感觉还是应该把参数命名成实际的意义

    相关文章

      网友评论

          本文标题:Effective Java - Lambda优先于匿名类

          本文链接:https://www.haomeiwen.com/subject/wncobrtx.html