您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > [Java基础教程-兄弟连马剑威]-135-泛型
泛型马剑威第135讲课程大纲1、没有泛型的日子2、泛型3、通配符4、泛型接口5、泛型方法6、泛型的嵌套使用1、没有泛型的日子说话小白与前女友凤凤分手后,有一天,接到凤凤打来的电话,说:“我有一个孩子,是你的”。小白顿时脸色发紫,瞬间被石化!2、泛型•JDK1.5之后出现了新的技术——泛型(Generic),此技术的最大特点是类中的属性的类型可以由外部决定•而且在声明类的时候应该采用如下的形式:•class类名称泛型类型,泛型类型,…{••}2、泛型•在使用泛型操作的时候,实际上有很多小的注意点,例如:构造方法上依然可以使用泛型或者有一种称为泛型的擦除。••相关术语:•ArrayListE:E称为类型变量或类型参数•ArrayListInteger:称为参数化的类型•ArrayListInteger:中的Integer称为类型参数的实例或实际参数类型•ArrayListInteger:称为typeof•ArrayList:称为原始类型2、泛型•参数化类型与原始类型的兼容性:•CollectionStringc=newVector();•Collectionc=newVectorString();•参数化类型不考虑类型参数的继承关系:•VectorStringv=newVectorObject();//错误•VectorObjectv=newVectorString();//错误•正确:•Vectorv=newVectorString();•VectorObjectv2=v;•错误:•VectorString[]vs=•newVectorString()[10];•定义数组不能使用泛型2、泛型•两个问题:•1、在构造方法上引用泛型•2、如果在使用的时候没有指定泛型的话,则表示擦除泛型。泛型一旦擦出之后,将按照Object进行接收,以保证程序不出现任何的错误。3、通配符•问题:•ChildrenObjectc1=newChildrenObject();•ChildrenIntegerc2=newChildrenInteger();•c1=c2;//此时无法转换•“?”表示的是可以接收任意的泛型类型,但是只是接收输出,并不能修改。提示:使用通配符可以引用其他各种参数化类型,通配符定义的变量主要用作引用,可以调用与参数无关的方法,不能调用与参数有关的方法。3、通配符•泛型上限就指一个的操作泛型最大的操作父类,例如,现在最大的上限设置成“Number”类型,那么此时,所能够接收到的类型只能是Number及其子类(Integer)。•泛型的上限通过以下的语法完成:•?extends类•泛型的下限指的是只能设置其具体的类或者父类。设置的语法如下:•?super类4、泛型接口•泛型不光可以在类上使用,还可以在接口中进行定义。操作的语法如下:•interface接口名称泛型类型,泛型类型,…{}5、泛型方法•泛型除了在类中定义之外,还可以在方法上定义,而且在方法上使用泛型,此方法所在的类不一定是泛型的操作类。•定义一个方法,实现任意类型数组中两个位置值的调换•publicstaticTT[]func(T[]array,inti,intt){•Ttemp=array[i];•array[i]=array[t];•array[t]=temp;•returnarray;•}6、泛型的嵌套使用•还记得我们在讲解集合Map的时候吗?•SetEntryInteger,Stringentrys=map.entrySet();谢谢Thanks
本文标题:[Java基础教程-兄弟连马剑威]-135-泛型
链接地址:https://www.777doc.com/doc-7798549 .html