Java面向对象程序设计泛型教程.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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();

文档评论(0)

金不换 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档