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

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

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精品文档

相关文档