快速业务通道

java api之交互操作性 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
ethod(Collections.enumeration(c));

API 设计

在这个虽短但却很重要的一节里,你将学习几个简单的准则,它使你的 API 可以与所有其它的遵循这一准则的精良的 API 无缝地交互操作。实质上,这些准则正是在对象集这个勇敢者的新世界里,作为一个好公民所必需的条件。

输入参数(in-Parameters)

如果你的API包含一个需要输入一个 对象集 的方法,十分重要的一点是,你应该将相关的参数类型声明为 对象集接口类型之一。绝不使用实现类型, 它允许 对象集 在不考虑实现细节的情况下被操纵,因而会使一个基于接口的对象集架构的目标流产。

进一步讲,你应该总是使用最不特殊的有意义的类型。例如,如果可以使用 Collection,则不要使用 List 或 Set 。但并不是要你绝不使用一个 List 或一个 Set ;如果一个方法依赖于这些接口之中的某些属性,则应该使用它们。例如,Java平台的许多 algorithms 要求输入一个 List ,因为它们依赖于列表是有顺序的这样一个事实。然而作为一般法则,在输入上使用的最好类型是最一般的: Collection 和 Map。

注意: 绝不、绝不定义你自己的特别的 对象集 类并要求输入这个类的对象。如果这样做,你会失去所有 由对象集架构所提供的益处。

java api之交互操作性(3)

时间:2010-12-24

返回值

返回值的灵活性要比输入参数大得多。你可以返回任意类型的一个对象,用它来实现或扩展某一个 对象集 接口。这可能是接口本身之一,或是扩展(或实现)某一个接口的某些特种类型。

例如,你可能想象要建立一个被称作ImageList的图象处理程序包,它返回一个新的实现了 List 的类的对象。除支持 List 操作之外,ImageList 应可以支持任意特殊应用程序操作。例如,它可能提供一个 indexImage 操作,它可以返回一个将 ImageList 中的每一个图形变成指甲盖大小,然后集中在一起的一个图象。非常值得注意的一点是,即使 API 可提供 ImageList 对象输出,它也应该接受任意 Collection (或也许是 List) 对象的输入。

从某种意义上讲,返回值应该有一个与输入参数相对的行为:最好返回最特殊的和可适用的 对象集 接口,而不是最一般的。例如,如果你十分有把握由某些方法所返回的 Map 总是一个SortedMap, 你就应该将 SortedMap 的返回类型赋予这个方法,而不是 Map。SortedMap 对象比普通 Map 对象的建立更费时,但功能也更强大。假设你的模块已经投资了一定时间来建立一个 SortedMap, 那么最好给用户以访问增加的功能的权利。进一步讲,用户将能够将返回的对象传递给那些要求 SortedMap 的方法,以及那些接受任意 Map 的方法。

再一次提醒你,绝不、绝不定义你自己的特别的 对象集 类并提供这个类的对象作为一个返回值。如果这样做,你将会失去所有由对象集架构提供的益处 (有点似曾相识吗?)

早期API(Legacy API)

现在有许多 API ,它们定义了自己特有的对象集 类型。虽然这是不幸的,但这就是事实, 因为在Java平台的前两个主要版本中没有 对象集 架构。假设你现在拥有一个那样的API。以下是你可以作的事情。如果可能的话,重新更改你的早期 对象集 类型以实现某一个标准 对象集 接口。这样,你返回的所有对象集 将与其它基于 对象集 的 API 平滑地交互操作。如果这是不可能的(例如,由于一个或几个先前存在的类型与标准对象集接口发生冲突), 定义一个adapter class(适配器类),它包装你的早期 对象集 对象,使其表现出一个标准 对象集 的功能 (适配器类是定制实现中的一个例子)。

如果可能的话,用新的符合输入准则的调用来重新更改你的API ,使其可以接受标准对象集接口。这样的调用可与采用早期对象集 类型的调用共同存在。如果这是不可能的,为你的早期类型提供一个构造函数或静态方法,它将使用标

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号