发布时间:2025-12-10 23:05:57 浏览次数:1
一介绍:
在JavaSE1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
二、泛型参数:
classGen<T>{privateTob;//定义泛型成员变量publicGen(Tob){this.ob=ob;}publicTgetOb(){returnob;}publicvoidsetOb(Tob){this.ob=ob;}publicvoidshowType(){System.out.println("T的实际类型是:"+ob.getClass().getName());}}publicclassGenericParameter{publicstaticvoidmain(String[]args){//定义泛型类Gen的一个Integer版本Gen<Integer>intOb=newGen<Integer>(100);intOb.showType();inti=intOb.getOb();System.out.println("value="+i);System.out.println("----------------------------------");//定义泛型类Gen的一个String版本Gen<String>strOb=newGen<String>("HelloDylan!");strOb.showType();Strings=strOb.getOb();System.out.println("value="+s);}}output:
T的实际类型是: java.lang.Integer
value= 100
----------------------------------
T的实际类型是: java.lang.String
value= Hello Dylan!
三、泛型类:
classGenericsFoo<T>{privateTx;publicGenericsFoo(Tx){this.x=x;}publicTgetX(){returnx;}publicvoidsetX(Tx){this.x=x;}}publicclassGenericClass{publicstaticvoidmain(Stringargs[]){GenericsFoo<String>strFoo=newGenericsFoo<String>("HelloGenerics!");GenericsFoo<double>douFoo=newGenericsFoo<double>(newdouble("33"));GenericsFoo<Object>objFoo=newGenericsFoo<Object>(newObject());System.out.println("strFoo.getX="+strFoo.getX());System.out.println("douFoo.getX="+douFoo.getX());System.out.println("objFoo.getX="+objFoo.getX());}}output:
strFoo.getX=Hello Generics!
douFoo.getX=33.0
objFoo.getX=java.lang.Object@1d0fafc
四 限制泛型:
importjava.util.ArrayList;importjava.util.Collection;classCollectionGenFoo<TextendsCollection>{privateTx;publicCollectionGenFoo(Tx){this.x=x;}publicTgetX(){returnx;}publicvoidsetX(Tx){this.x=x;}}publicclassGenericRestrict{publicstaticvoidmain(String[]args){CollectionGenFoo<ArrayList>listFoo=null;listFoo=newCollectionGenFoo<ArrayList>(newArrayList());CollectionGenFoo<?extendsCollection>listFoo1=null;listFoo1=newCollectionGenFoo<ArrayList>(newArrayList());System.out.println("实例化成功!");}}output:
实例化成功!
五 泛型方法:
publicclassGenericFunction{public<T>voidf(Tx){System.out.println(x.getClass().getName());}publicstaticvoidmain(String[]args){GenericFunctionea=newGenericFunction();ea.f("");ea.f(10);ea.f('a');ea.f(ea);}}output:
java.lang.String
java.lang.Integer
java.lang.Character
GenericFunction
-----------------------------
dylan presents.