|
|
|
|
移动端

1.5.6 类型限界

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

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

技术沙龙 | 邀您于8月25日与国美/AWS/转转三位专家共同探讨小程序电商实战

1.5.6 类型限界

假设我们想要编写一个findMax例程。考虑图1-16中的代码。由于编译器不能证明在第6行上对compareTo的调用是合法的, 21因此, 程序不能正常运行; 只有在AnyType是Comparable的情况下才能保证compareTo存在。我们可以使用类型限界(type bound)解决这个问题。类型限界在尖括号内指定, 它指定参数类型必须具有的性质。一种自然的想法是把性质改写成

我们知道, 因为Comparable接口如今是泛型的, 所以这种做法很自然。虽然这个程序能够被编译, 但是更好的做法却是

然而, 这个做法还是不能令人满意。为了看清这个问题, 假设Shape实现Comparable<Shape>, 设Square继承Shape。此时, 我们所知道的只是Square实现Comparable<Shape>。于是, Square IS-A Comparable<Shape>, 但它IS-NOT-A Comparable<Square>! 

应该说, AnyType IS-A Comparable<T>, 其中, T是AnyType的父类。由于我们不需要知道准确的类型T, 因此可以使用通配符。最后的结果变成

图1-17显示findMax的实现。编译器将接受类型T的数组, 只是使得T实现Comparable<S>接口, 其中T IS-A S。当然, 限界声明看起来有些混乱。幸运的是, 我们不会再看到任何比这种用语更复杂的用语了。


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

51CTO读书频道二维码


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

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

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

视频课程+更多

虚拟化技术-vSphere实验环境建设与学习引导视频课程

虚拟化技术-vSphere实验环境建设与学习引导视

讲师:谌玺26801人学习过

C语言程序设计

C语言程序设计

讲师:谭科51503人学习过

SQLite数据库 [精讲微视频]

SQLite数据库 [精讲微视频]

讲师:大头娃17527人学习过

读 书 +更多

《广域网》

在开始学习WAN资料时,我经常面对资料深度不够或者为电气工程师编写的书。另外,在看了几本书,并且对Internet进行了研究以后,我觉得应当...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊