java api设计规范_Java 8中的默认方法及其在API设计中的变化

java api设计规范

Java 8在接口中引入了默认方法。 这篇文章描述了它们是什么,以及它们如何改变API的设计。

名义设计

以前,在Java中,接口只能具有合同 -没有实现的方法签名。

为了添加一些实现,需要一个类,无论是否抽象

因此,传统的API设计遵循以下层次结构:

标称API设计
  1. 根接口定义合同
  2. 中级类实现常见行为, Bar
  3. 如有必要,层次结构中的类将覆盖此行为, 例如 Corge

工作中的扳手

这是完美的,直到API设计人员无法访问的类可以实现该接口为止。 以下层次结构描述了Java Collections API的List部分,以及一个附加的自定义类:

集合API

现在,让我们在List接口中介绍sort()方法。 只有类,即 AbstractListMyList实际上可以实现此方法。

显然,即使在两个类中都强制执行相同的sort()实现是不可能的。 List直接实现必须复制( yuck!AbstractListsort()

为了消除重复和使设计干燥,Java API设计人员已将sort()方法从List移至仅使用static方法的不相关类。

馆藏

这解决了常见的代码问题,因为现在只有一种方法负责排序

另一方面, static方法不是面向对象的。 更糟糕的是,代码中 ListCollections之间没有关系(尽管存在相反的关系)。 因此,如果不了解Collections类及其功能,就无法了解它。

抢救的默认方法

现在,想象一下是否有可能在接口方法中实现代码。 sort()方法可以在List接口中实现。 上面的类图将如下所示:

java8集合api

这样可以解决上述问题。 默认情况下,将通过继承为每个列表实现提供sort()方法。

这正是使用默认方法的原因。 不多不少。

对于好奇的读者,Collections.sort()实现已重写为委托给默认方法://没有泛型以提高可读性public class Collections {public static void sort(List list){list.sort(null); }}

结论

如果最终不得不在多个类中复制代码,而不是将其分解为单个公共接口,那么默认方法是比帮助器类更为优雅的解决方案。

翻译自: https://blog.frankel.ch/default-methods-java-8/

java api设计规范

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值