您所在的位置:读书频道 > 设计开发 > Java系列 > 15.2 简单泛型

15.2 简单泛型

2007-06-28 09:00 Bruce Eckel 著 陈昊鹏 译 机械工业出版社 字号:T | T
一键收藏,随时查看,分享好友!

《Java编程思想 第4版》共22章,主要包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I/O系统、枚举类型、并发以及图形化用户界面等内容。本文是简单泛型介绍。

AD:

15.2   简单泛型
有许多原因促成了泛型的出现,而最引人注目的一个原因,就是为了创造容器类。(关于容器类,你可以参考第11章和第17章这两章。)容器,就是存放要使用的对象的地方。数组也是如此,不过与简单的数组相比,容器类更加灵活,具备更多不同的功能。事实上,所有的程序,在运行时都要求你持有一大堆对象,所以,容器类算得上最具重用性的类库之一。
我们先来看看一个只能持有单个对象的类。当然了,这个类可以明确指定其持有的对象的类型:

不过,这个类的可重用性就不怎么样了,它无法持有其他类型的任何对象。我们可不希望为碰到的每个类型都编写一个新的类。
在Java SE5之前,我们可以让这个类直接持有Object类型的对象:

现在,Holder2可以存储任何类型的对象,在这个例子中,只用了一个Holder2对象,却先后三次存储了三种不同类型的对象。
有些情况下,我们确实希望容器能够同时持有多种类型的对象。但是,通常而言,我们只会使用容器来存储一种类型的对象。泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。
因此,与其使用Object,我们更喜欢暂时不指定类型,而是稍后再决定具体使用什么类型。要达到这个目的,需要使用类型参数,用尖括号括住,放在类名后面。然后在使用这个类的时候,再用实际的类型替换此类型参数。在下面的例子中,T就是类型参数:

现在,当你创建Holder3对象时,必须指明想持有什么类型的对象,将其置于尖括号内。就像main()中那样。然后,你就只能在Holder3中存入该类型(或其子类,因为多态与泛型不冲突)的对象了。并且,在你从Holder3中取出它持有的对象时,自动地就是正确的类型。
这就是Java泛型的核心概念:告诉编译器想使用什么类型,然后编译器帮你处理一切细节。
一般而言,你可以认为泛型与其他的类型差不多,只不过它们碰巧有类型参数罢了。稍后我们会看到,在使用泛型时,我们只需指定它们的名称以及类型参数列表即可。
练习1:(1) 配合typeinfo.pets类库,用Holder3来证明,如果指定Holder3可以持有某个基类类型,那么它也能持有导出类型。
练习2:(1) 创建一个Holder类,使其能够持有具有相同类型的3个对象,并提供相应的读写方法访问这些对象,以及一个可以初始化其持有的3个对象的构造器。

【责任编辑:雪花 TEL:(010)68476606-8007】

回书目   上一节   下一节

分享到:

  1. Linux服务器配置全程实录
  2. 揭秘--优秀PPT这样制作

热点职位

更多>>

热点专题

更多>>

读书

解密SEO:搜索引擎优化与网站成功战略
本书是作者根据十年网站营销经验,特别是搜索引擎优化(SEO)实现营销方面的技术和实践总结。本书帮助读者建立搜索营销的概念,

51CTO旗下网站

领先的IT技术网站 51CTO 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 51CTO学院 区块链第一聚合媒体 zhijiapro