- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java泛型指南zh
Java1.5泛型指南中文版(Java1.5 Generic Tutorial)
英文版pdf下载链接:/j2se/1.5/pdf/generics-tutorial.pdf
???????????????????????????????????????????????? 译者: chengchengji@163.com
?
目??????? 录
?
摘要和关键字... 1
1.?????? 介绍... 1
2.?????? 定义简单的泛型... 2
3.?????? 泛型和子类继承... 3
4.?????? 通配符(Wildcards). 4
4.1.?????? 有限制的通配符(Bounded Wildcards). 5
5.?????? 泛型方法... 6
6.?????? 与旧代码交互... 9
6.1.?????? 在泛型代码中使用老代码... 9
6.2.?????? 擦除和翻译(Erasure and Translation). 10
6.3.???? 在老代码中使用泛型代码... 11
7.?????? 要点(The Fine Print). 12
7.1.?????? 一个泛型类被其所有调用共享... 12
7.2.?????? 转型和instanceof 13
7.3.?????? 数组Arrays. 13
8.?????? Class Literals as Run-time Type Tokens. 14
9.?????? More fun with *. 16
9.1.?????? 通配符匹配(wildcard capture). 18
10.???? 泛型化老代码... 18
11.???? 致谢... 20
?
摘要和关键字
?????? generics、type safe、type parameter(variable)、formal type parameter、actual type parameter、wildcards(?)、unknown type、? extends T、? super T、erasure、translation、cast、instanceof、arrays、Class Literals as Run-time Type Tokens、wildcard capture、multiple bounds(T extends T1 T2 ... Tn)、covariant returns
?????
?
1.??????????? 介绍
JDK1.5中引入了对java语言的多种扩展,泛型(generics)即其中之一。
这个教程的目标是向您介绍java的泛型(generic)。你可能熟悉其他语言的泛型,最著名的是C++的模板(templates)。如果这样,你很快就会看到两者的相似之处和重要差异。如果你不熟悉相似的语法结构,那么更好,你可以从头开始而不需要忘记误解。
Generics允许对类型进行抽象(abstract over types)。最常见的例子是集合类型(Container types),Collection的类树中任意一个即是。
下面是那种典型用法:
?????? List myIntList = new LinkedList();// 1
??? ??? myIntList.add(new Integer(0));// 2
?????? Integer x = (Integer) myIntList.iterator().next();// 3
第3行的类型转换有些烦人。通常情况下,程序员知道一个特定的list里边放的是什么类型的数据。但是,这个类型转换是必须的(essential)。编译器只能保证iterator返回的是Object类型。为了保证对Integer类型变量赋值的类型安全,必须进行类型转换。
当然,这个类型转换不仅仅带来了混乱,它还可能产生一个运行时错误(run time error),因为程序员可能会犯错。
程序员如何才能明确表示他们的意图,把一个list中的内容限制为一个特定的数据类型呢?这是generics背后的核心思想。这是上面程序片断的一个泛型版本:
?????? ListInteger myIntList = new LinkedListInteger(); // 1
?????? myIntList.add(new Integer(0)); // 2
?????? Integer x = myIntList.iterator().next(); // 3
注意变量myIntList的类型声明。它指定这不是一个任意的List,而是一个Integer的List,写作:ListInteger。我们说List是一个带一个类型参数
文档评论(0)