第44项:坚持使用标准的函数接口

随着Java引入lambda表达式,API设计的最佳实践发生了变化。文章探讨了如何使用标准函数接口,如Predicate和Function,以提高API的易用性和互操作性。作者建议优先使用标准功能性接口,而不是创建新的接口,并给出了何时自定义接口的指导原则。
摘要由CSDN通过智能技术生成

  既然Java有lambda,那么编写API的最佳实践已经发生了很大变化。例如,模板方法模式[Gamma95],其中子类重写基本方法以具体化其超类的行为,远没那么有吸引力。现在的替代方案是提供一个静态工厂或构造函数,它接受一个函数对象来实现相同的效果。更一般地说,你将编写更多以函数对象作为参数的构造函数和方法。需要谨慎地选择正确的功能参数类型。

  考虑LinkedHashMap。你可以通过重写其受保护的removeEldestEntry方法将此类用作缓存,该方法每次将新key添加到map时都会调用。当此方法返回true时,map将删除其最旧的entry,该entry将传递给该方法。 以下覆盖允许地图增长到一百个entry,然后在每次添加新key时删除最旧的entry,保留最近的一百个entry:

protected boolean removeEldestEntry(Map.Entry<K,V> eldest) {
   
    return size() > 100;
}

  这种技术【实现方式】很好,但你可以用lambdas做得更好。如果今天编写LinkedHashMap,它将有一个带有函数对象的静态工厂或构造函数。查看removeEldestEntry的声明,你可能会认为函数对象应该采用Map.Entry <K,V>并返回一个布尔值,但是不会这样做:removeEldestEntry方法调用size()来获取map中entry的数目,因为removeEldes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值