JAVA编程基础课程-300集(史上最全、最深、最细)泛型本章概述起因起因:,从而失去自己的实际类型。从集合中取出时往往需要转型,效率低,容易产生错误。方案:在定义集合的时候同时定义集合中对象的类型作用:模板:提高代码的重用率安全:在编译的时候检查类型安全省心:所有的强制转换都是自动和隐式的概念概念:泛型就是参数化类型。适用于对多种数据类型执行相同功能的代码。泛型中的类型在使用时指定。泛型归根到底就是“模板”。如:可拆卸刀头的螺丝刀检查需要拧动的螺丝,根据螺丝选择适合刀头(一字、十字、星形),将正确的刀头插入到螺丝刀柄上后,您就可以使用螺丝刀执行完全相同的功能,即拧螺丝。泛型主要适用在集合中任意化引出:学生成绩有三种情况1、整数2、小数3、字符串任意化:Object是所有类的根类,但是具体类使用的时候;需要类型强制转换的多态:Object可以接受任意类型。缺点:需要类型转换;需要类型检查;需要处理转换错误异常泛型:使用泛型时,在实际使用之前类型就已经确定了,不需要强制转换。lassStudent{privateObjectjavase;publicStudent(){}publicStudent(Objectjavase){=javase;}publicObjectgetJavase(){returnjavase;}publicvoidsetJavase(Objectjavase){=javase;}}publicstaticvoidmain(String[]args){//存入整数int-->Integer-->ObjectStudentstu=newStudent(80);Objectjavase=();//类型检查处理转换异常 if(javaseinstanceofInteger){//强制类型转换IntegerjavaseScore=(Integer)javase;}}泛型类定义类时使用泛型,<>定义模板Student使用泛型//此处可以随便写标识字母,lassStudent<T>{privateTjavase;publicStudent(Tjavase){ =javase;}publicvoidsetJavase(Tjavase){=javase;}publicTgetJavase(){returnjavase;}}class类名<字母>{private字母属性名;…setter与getter.} a)不能使用在基本类型上b)不能使用在静态属性上publicstaticvoidmain(String[]args){//使用时指定类型(引用类型Integer)Student<Integer>stu=newStudent<Integer>();//1、安全:(12);//自动装箱//2、省心:类型转换intjavase=();//自动拆箱}//使用时指定类型(引用类型String)Student<String>stu=newStudent<String>();//1、安全:("优秀");//2、省心:类型转换Stringjavase=();泛型字母形式类型参数(formaltypeparameters)即泛型字母命名:泛型字母可以随意指定,尽量使用单个的大写字母(有时候多个泛型类型时会加上数字,比如T1,T2常见字母(见名知意)TTypeKVKeyValueEElement当类被使用时,会使用具体的实际类型参数(actualtypeargument)lassArrayList<E>extendsAbstractList<E>implementsList<E>…{}lassHashMap<K,V>extendsAbstractMap<K,V>implementsMap<K,V>…{}parator<T>{ pare(Tt); }注意:接口中泛型字母只能使用在方法中,不能使用在全局常量中
尚学堂 裴新 java泛型&容器 来自淘豆网m.daumloan.com转载请标明出处.