Java程序设计基础(第2版) 课件 第8章 范型(第2版)_第1页
Java程序设计基础(第2版) 课件 第8章 范型(第2版)_第2页
Java程序设计基础(第2版) 课件 第8章 范型(第2版)_第3页
Java程序设计基础(第2版) 课件 第8章 范型(第2版)_第4页
Java程序设计基础(第2版) 课件 第8章 范型(第2版)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

泛型Generics1

泛型接口的名字List后面用尖括号括起来的“E”称为类型形式参数,用以指定元素的类型。2publicinterfaceList<E>extendsCollection<E>{booleanadd(Eo);voidadd(intindex,Eelement);booleanaddAll(Collection<?extendsE>c);booleancontainsAll(Collection<?>c);......}动机在JavaSE没有泛型之前,集体对象中元素的类型只能是Object。可以向线性表中添加任意类型的对象:String类型的对象,或者Integer类型的对象等对于无元素类型约束的添加对象,直到程序在运行时刻才能发现问题如果使用泛型,则可以把问题的发现提前到编译时刻,以语法错误的形式解决NoGenericsDemo.java3使用范型使用newArrayList<Integer>创建线性表,并且指定元素Integer类型这样的语句就告诉编译器,线性表中仅运行存放Integer类型的对象GenericsDemo.java4使用范型通过泛型,编译器就可以通过参数检查保证类型兼容,从而保证了类型安全。如果希望线性表中存放任意数值对象,而不仅仅存放整数对象。也就是说,也允许Float类型、Double类型的对象作为元素GenericsNumberDemo.java58.2范型类声明了类型参数的类称为泛型类类型参数声明在类名后面一对尖括号中MyGenericDemo.java68.3泛型接口含类型参数的接口称作泛型接口例栈接口6个抽象方法,分别完成压栈push弹栈pop查看栈顶元素top判断栈满isFull判断栈空isEmpty清空clearIStack.java7实现类MyStack<E>是IStack<E>的一种基于定长容量线性表的实现。范型接口IStack及其实现类范型栈MyStack的使用MyStack.javaMyStackTest.java88.4泛型方法泛型方法在调用方法的时候指明类型参数的具体类型例:调用范型方法从一个整型线性表中查找首个元素;再从另外一个字符串线性表中查找首个元素该方法的第一个形式参数的类型是List<?extendsNumber>GenericMethodDemo.java9类型记号的约定10<?>通配符(?)表示任意类型。比如在下面的方法的形式参数中,使用通配符把线性表元素声明为任意类型:

publicstaticvoidprintList(List<?>aList){for(Objecto:aList)System.out.println(o);}11<?extendsNumber>而<?extendsNumber>表示任意Number类型的子类型,所以就可以使用Number类型作为元素的类型进行遍历:

publicstaticvoidprintList(List<?extendsNumber>aList){for(Numbero:aList)System.out.println(o);}

12注意List<?extendsNumber>类型的接受Number子类型的对象,如Integer类型的对象或者Double类型的对象。类型List<Integer>和List<?extendsNumber>是兼容类型但是,类型List<Integer>和List<Number>却不是兼容类型。下面的对象创建是错误的:List<Number>list=newArrayList<Integer>();下面对voidprintList(List<Number>aList)的调用是错误的:List<Integer>alist=newArrayList<>();

printList(aList)13类型推理List<Integer>a=newArrayList<>();ArrayList后的<>中省略了Integer。这是因为编译器通过类型推理能够知道ArrayList后的<>中是Integer。14声明类型参数可在泛型方法头部返回值类型之前声明类型参数。例如:public<T>List<T>toListFromArray(T[]a){returnArrays.stream(a).collect(Collectors.toList());}方法头部中的<T>表示该方法将处理泛型T,这个声明是必须的,即使方法的返回值类型为void。15声明多个类型参数例如:publicstatic<T,G>List<G>toListFromArray(T[]a,Function<T,G>mapperFunction){returnArrays.stream(a).map(mapperFunction).collect(Collectors.toList());}16方法头部中声明的mapperFunction函数把元素类型T的数组转换为元素类型G的列线性表。下面的代码片段

Integer[]intArray={1,2,3,4,5};

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论