- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JDK 1.5引入的新特性 -- 泛型
JDK 1.5引入的新特性 -- 泛型 选择自?/user/laughcry2002laughcry2002?的 Blog关键字?JDK 1.5引入的新特性 -- 泛型出处?1. 引言JDK 1.5 中引入了新的语言成分, 泛型(Generics)是其中较为重要的一个.简单的泛型(Defining Simple Generics)以下代码摘自java.util包的List接口和Iterator接口的定义:public interface ListE { void add(E x); IteratorE iterator();}public interface IteratorE { E next(); boolean hasNext();}类型参数与尖括号有关的一些东西是JDK 5引入的新东西, 它们是List和Iterator接口的形式的类型参数(简称类型形参)声明.而在对泛型声明List进行调用时(例如: ListInteger), 所有出现的类型形参(如?E)的地方, 都会被实际的类型参数(简称类型实参, 如 Integer)所替换掉.虽然与C++中的模板机制在形式上很想像, 但必需注意, Java中的泛型声明决不会在调用时被展成多份副本: 不论是在源码级, 二进制级, 还是在磁盘或内存中, 都不会被展开!泛型声明只会也只需编译一次, 并生成一个类文件(class文件), 这一点跟普通的类或接口完全一样.类型参数其实跟方法或构造器中所用的通常参数相类似. 一个方法中可以声明它用以处理的形式的值参数, 相似地, 泛型声明也有其形式的类型参数; 当方法被调用时, 实际参数会替换形式参数, 然后执行方法体, 同样, 当泛型声明被调用时, 实际的类型参数会替换掉形式的类型参数.关于命名约定的备注: 推荐使用精炼而简明(如, 单个字符)的方式为形式的类型参数命名. 最好避免使用小写字符, 以便与普通的类或接口的参数相区分开来. 许多宣传品类型使用 E 表示其元素的类型形参.2. 泛类型与子类型化(Generics and Subtyping)先看以下两行代码是否合法:ListString ls = new ArrayListString(); // 1ListObject lo = ls; // 2第一行没问题, 关键在第二行代码, 大多数人会认为, 一个String的List自然更是一个Object的List, 因此, 第2行没问题.好, 接着看以下代码:lo.add(new Object()); // 3String s = ls.get(0); // 4: 试图将一个Object赋给一个String!可见, 通过别名lo, 我们能对ls, 一个String的列表, 进行数据操作(特别是插入一个Object), 从而导致ls不仅仅是容纳了String对象! 这是Java编译器不容许的! 编译时, 第2行会报告一个编译错误的.通常, 若Foo是Bar的一个子类型(子类或子接口), G是某个泛型声明, 则GFoo并不是GBar的一个子类型.这一点往往是最难以理解的, 因为它和通常的直观相左. 在直观的理解中, 我们实际上假定了集合是不会变动的, 但java语言中则非如此.3. 通配(Wildcards)假定要输出一个集合中的所有元素. 以下分别是旧版本及新版本(JDK 1.5)中的写法:void printCollection(Collection c) { Iterator i = c.iterator(); for( k = 0; k c.size(); k++) { System.out.println( i.next() );}}void printCollection(CollectionObject c) { for(Object e : c) { System.out.println(e);}}问题在于, 新版本反而不如旧版本更有用些. 因为旧版本能使用各种类型的集合作为参数, 但新版本则只能使用CollectionObject. 而正如上节看到的, CollectionObject并不是其它各种集合的超类型(父类型).所有集合的超类型应该写作: Collection?, 读作: collection of unknown(未知集合), 即一个集合, 其元素类型可以与任何类型相匹配. 因此称这种类型为通配类型.正确实现上述旧版本的代码可以这么写:void printCollection(Collection? c) { for(Object e : c) { System.out.println(e);}}这时, 可以用任意类型的集合来调用此方法. 注意在方法体中, 仍然从 c 中读入元素并赋给了Object, 这
您可能关注的文档
最近下载
- 2025年院感知识理论考试题库+答案.docx VIP
- 配合协调与服务承诺.docx VIP
- 14《称空气》课件 科学三年级上册(苏教版2025).pptx
- 晚期消化道肿瘤临床规范诊疗新进展题库答案-2025年华医网继续教育.docx VIP
- 工程协调配合措施及承诺.docx VIP
- 医院信息科笔试、面试题(附答案).docx VIP
- 施工协调配合的承诺与措施.pdf VIP
- 医院信息科计算机考试精彩试题(附答案).docx
- 2025年必威体育精装版人教版七年级(初一)数学上册教学计划及进度表(新课标,新教材).docx
- 2025至2030地毯和室内装饰清洁服务行业项目调研及市场前景预测评估报告.docx
文档评论(0)