- 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语言程序设计 信息工程学院 Java语言程序设计 信息工程学院 信息工程学院 Java语言程序设计 信息工程学院 信息工程学院 Java语言程序设计 信息工程学院 信息工程学院 Java语言程序设计 信息工程学院 信息工程学院 Java语言程序设计 信息工程学院 信息工程学院 Java语言程序设计 信息工程学院 信息工程学院 信息类专业课程 西北农林科技大学 第十章 泛型 体验泛型 Jdk 1.5以前的集合类中存在什么问题 ArrayList collection = new ArrayList(); collection.add(1); collection.add(1L); collection.add(abc); int i = (Integer)arrayList.get(1);//编译要强制类型转换且运行时出错! Jdk 1.5的集合类希望你在定义集合时,明确表示你要向集合中装哪种类型的数据,无法加入指定类型以外的数据 ArrayListInteger collection2 = new ArrayListInteger(); collection2.add(1); /*collection2.add(1L); collection2.add(“abc”);*///这两行代码编译时就报告了语法错误 int i2 = collection2.get(0);//不需要再进行类型转换 泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉“类型”信息,使程序运行效率不受影响,对于参数化的泛型类型,getClass()方法的返回值和原始类型完全一样。由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其它类型的数据,例如,用反射得到集合,再调用其add方法即可。 了解泛型 ArrayListE类定义和ArrayListInteger类引用中涉及如下术语: 整个称为ArrayListE泛型类型 ArrayListE中的E称为类型变量或类型参数 整个ArrayListInteger称为参数化的类型 ArrayListInteger中的Integer称为类型参数的实例或实际类型参数 ArrayListInteger中的念着typeof ArrayList称为原始类型 参数化类型与原始类型的兼容性: 参数化类型可以引用一个原始类型的对象,编译报告警告,例如,CollectionString c = new Vector();//可不可以,不就是编译器一句话的事吗? 原始类型可以引用一个参数化类型的对象,编译报告警告,例如,Collection c = new VectorString();//原来的方法接受一个集合参数,新的类型也要能传进去 参数化类型不考虑类型参数的继承关系: VectorString v = new VectorObject(); //错误!///不写Object没错,写了就是明知故犯 VectorObject v = new VectorString(); //也错误! 编译器不允许创建类型变量的数组。即在创建数组实例时,数组的元素不能使用参数化的类型,例如,下面语句有错误: VectorInteger vectorList[] = new VectorInteger[10]; 思考题:下面的代码会报错误吗? Vector v1 = new VectorString(); VectorObject v = v1; 泛型中的?通配符 问题: 定义一个方法,该方法用于打印出任意参数化类型的集合中的所有数据,该方法如何定义呢? 错误方式: public static void printCollection(CollectionObject cols) { for(Object obj:cols) { System.out.println(obj); } /* cols.add(string);//没错 cols = new HashSetDate();//会报告错误!*/ } 正确方式: public static void printCollection(Collection? cols) { for(Object obj:cols) { System.out.println(obj); } //cols.add(string);//错误,因为它不知自己未来匹配就一定是String cols.size();//没错,此方法与类型参数没有关系 cols = new HashSetDate();
您可能关注的文档
最近下载
- (YUM)百胜验厂审核详细要求清单.pdf VIP
- 四上数学口算竖式脱式应用题每日一练60天(60页).pdf VIP
- 《云南彝良地区地质构造特征探讨.docx VIP
- 三上数学口算竖式脱式应用题每日一练60天(60页).pdf VIP
- 2025年新青岛版数学三年级上册全册课件.pptx
- 《旅游客源地与目的地概况》教案 第1课 了解世界旅游业(一).pdf VIP
- 人教版劳动教育四年级上册全册教学设计.pdf VIP
- 2022年国家人体生物监测工作手册.pdf VIP
- 电子课件自主学习修订版第一单元开启自主学习的旅程.pptx VIP
- JBT 4333.2-2013 厢式压滤机和板框压滤机 第2部分:技术条件.pdf VIP
文档评论(0)