预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

讲解Java的泛型 讲解Java的泛型我们知道,使用变量之前要定义,定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值。假如我们现在要定义一个类来表示坐标,要求坐标的数据类型可以是整数、小数和字符串,例如:x=10、y=10x=12.88、y=129.65x="东京180度"、y="北纬210度"针对不同的数据类型,除了借助方法重载,还可以借助自动装箱和向上转型。我们知道,基本数据类型可以自动装箱,被转换成对应的包装类;Object是所有类的祖先类,任何一个类的实例都可以向上转型为Object类型,例如:int-->Integer-->Objectdouble-->Double-->ObjectString-->Object这样,只需要定义一个方法,就可以接收所有类型的数据。请看下面的代码:publicclassDemo{publicstaticvoidmain(String[]args){Pointp=newPoint();p.setX(10);//int->Integer->Objectp.setY(20);intx=(Integer)p.getX();//必须向下转型inty=(Integer)p.getY();System.out.println("Thispointis:"+x+","+y);p.setX(25.4);//double->Integer->Objectp.setY("东京180度");doublem=(Double)p.getX();//必须向下转型doublen=(Double)p.getY();//运行期间抛出异常System.out.println("Thispointis:"+m+","+n);}}classPoint{Objectx=0;Objecty=0;publicObjectgetX(){returnx;}publicvoidsetX(Objectx){this.x=x;}publicObjectgetY(){returny;}publicvoidsetY(Objecty){this.y=y;}}上面的代码中,生成坐标时不会有任何问题,但是取出坐标时,要向下转型,在Java多态对象的类型转换一文中我们讲到,向下转型存在着风险,而且编译期间不容易发现,只有在运行期间才会抛出异常,所以要尽量避免使用向下转型。运行上面的代码,第12行会抛出java.lang.ClassCastException异常。那么,有没有更好的办法,既可以不使用重载(有重复代码),又能把风险降到最低呢?有,可以使用泛型类(JavaClass),它可以接受任意类型的数据。所谓“泛型”,就是“宽泛的数据类型”,任意的数据类型。更改上面的.代码,使用泛型类:publicclassDemo{publicstaticvoidmain(String[]args){//实例化泛型类Pointp1=newPoint();p1.setX(10);p1.setY(20);intx=p1.getX();inty=p1.getY();System.out.println("Thispointis:"+x+","+y);Pointp2=newPoint();p2.setX(25.4);p2.setY("东京180度");doublem=p2.getX();Stringn=p2.getY();System.out.println("Thispointis:"+m+","+n);}}//定义泛型类classPoint{T1x;T2y;publicT1getX(){returnx;}publicvoidsetX(T1x){this.x=x;}publicT2getY(){returny;}publicvoidsetY(T2y){this.y=y;}}运行结果:Thispointis:10,20Thispointis:25.4,东京180度与普通类的定义相比,上面的代码在类名后面多出了,T1,T2是自定义的标识符,也是参数,用来传递数据的类型,而不是数据的值,我们称之为类型参数。在泛型中,不但数据的值可以通过参数传递,数据的类型也可以通过参数传递。T1,T2只是数据类型的占位符,运行时会被替换为真正的数据类型。传值参数(我们通常所说的参数)由小括号包围,如(intx,doubley),类型参数(泛型参数)由尖括号包围,多个参数由逗号分隔,如或