|
|
|
|
移动端

1.4.3 使用接口类型表示泛型

《数据结构与算法分析:Java语言描述(原书第3版)》第1章引论,在这一章, 我们阐述本书的目的和目标并简要复习离散数学以及程序设计的一些概念。本节为大家介绍使用接口类型表示泛型。

作者:冯舜玺/陈越 译来源:机械工业出版社|2016-04-13 10:46

年前最后一场技术盛宴 | 1月27日与京东、日志易技术大咖畅聊智能化运维发展趋势!


1.4.3 使用接口类型表示泛型

只有在使用Object类中已有的那些方法能够表示所执行的操作的时候, 才能使用Object作为泛型类型来工作。

例如, 考虑在由一些项组成的数组中找出最大项的问题。基本的代码是类型无关的, 但是它的确需要一种能力来比较任意两个对象, 并确定哪个是大的, 哪个是小的。因此, 我们不能直接找出Object的数组中的最大元素——我们需要更多的信息。最简单的想法就是找出Comparable的数组中的最大元。要确定顺序, 可以使用compareTo方法, 我们知道, 它对所有的Comparable都必然是现成可用的。图1-8中的代码做的就是这项工作, 它提供一种main方法, 该方法能够找出String或Shape数组中的最大元。

现在, 提出几个忠告很重要。首先, 只有实现Comparable接口的那些对象才能够作为Comparable数组的元素被传递。仅有compareTo方法但并未宣称实现Comparable接口的对象不是Comparable的, 它不具有必需的IS-A关系。 因为我们也许会比较两个Shape的面积, 因此假设Shape实现Comparable接口。这个测试程序还告诉我们, Circle、 Square和Rectangle都是Shape的子类。

第二, 如果Comparable数组有两个不相容的对象(例如, 一个String和一个Shape), 那么CompareTo方法将抛出异常ClassCastException。这是我们期望的性质。

第三, 如前所述, 基本类型不能作为Comparable传递, 但是包装类则可以, 因为它们实现了Comparable接口。

第四, 接口究竟是不是标准的库接口倒不是必需的。

最后, 这个方案不是总能够行得通, 因为有时宣称一个类实现所需的接口是不可能的。例如, 一个类可能是库中的类, 而接口却是用户定义的接口。如果一个类是final类, 那么我们就不可能扩展它以创建一个新的类。1.6节对这个问题提出了另一个解决方案, 即function object。这种函数对象(function object)也使用一些接口, 它或许是我们在Java库中所遇到的核心论题之一。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

J2ME手机游戏设计技术与实战

本书主要介绍了在手机上开发J2ME游戏的方法,作者在介绍了J2ME游戏开发相关知识背景的基础上,以大富翁手机游戏的设计开发为例,详细讲述了...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊