java李兴华学习笔记之泛型资料下载.pdf
《java李兴华学习笔记之泛型资料下载.pdf》由会员分享,可在线阅读,更多相关《java李兴华学习笔记之泛型资料下载.pdf(15页珍藏版)》请在冰豆网上搜索。
因为现在的程序中可以接收三种数据类型的数据,所以为了保证程序的正确性,最好使用Object完成,因为Object可以接收任意的引用数据类型:
数字?
自动装箱操作?
Object字符串?
Object按照以上的特点,完成程序:
publicclassPoint/表示坐标privateObjectx;
privateObjecty;
publicObjectgetX()returnx;
publicvoidsetX(Objectx)this.x=x;
publicObjectgetY()returny;
publicvoidsetY(Objecty)this.y=y;
此时,Point类完成了。
此时,设置一个整型数字,那么来观察是否可以操作:
packageorg.lxh.genericsdemo01;
publicclassGenDemo01publicstaticvoidmain(Stringargs)Pointp=newPoint();
p.setX(11);
/int-Integer-Objectp.setY(20);
/int-Integer-Objectintx=(Integer)p.getX();
/取出x坐标inty=(Integer)p.getY();
/取出y坐标北京北京MLDN软件实训中心软件实训中心联系电话:
010-51283346第(3)页共(15)页E-Mail:
System.out.println(x的坐标是:
+x);
System.out.println(y的坐标是:
+y);
此时,达到了设置整数的目的,那么下面继续完成设置小数的操作。
publicclassGenDemo02publicstaticvoidmain(Stringargs)Pointp=newPoint();
p.setX(11.3f);
p.setY(20.3f);
floatx=(Float)p.getX();
/取出x坐标floaty=(Float)p.getY();
/取出y坐标System.out.println(x的坐标是:
下面继续设置字符串作为x和y的坐标。
publicclassGenDemo03publicstaticvoidmain(Stringargs)Pointp=newPoint();
p.setX(东经度);
p.setY(北纬度);
Stringx=(String)p.getX();
/取出x坐标Stringy=(String)p.getY();
此时,基本的功能已经完成了,但是此种操作是否存在问题呢?
在此操作之中,可以发现所有的内容都是以Object进行操作的,那么就意味着,可以设置任意的类型,即:
X可以是整型,Y可以是字符串。
publicclassGenDemo04publicstaticvoidmain(Stringargs)Pointp=newPoint();
p.setX(10);
intx=(Integer)p.getX();
北京北京MLDN软件实训中心软件实训中心联系电话:
010-51283346第(4)页共(15)页E-Mail:
此时程序在编译的时候没有任何的问题,但是在执行的时候出现了以下的错误提示:
Exceptioninthreadmainjava.lang.ClassCastException:
java.lang.Stringcannotbecasttojava.lang.Integeratorg.lxh.genericsdemo01.GenDemo04.main(GenDemo04.java:
9)之所以会这样,因为在程序中的所有的属性都可以向Object进行转换,那么此时程序的入口就显得不那么规范了,而且存在安全的漏洞。
但是,从之前所学习过的全部代码来看,此处只能应用到这里了。
没有更好的方法了。
3.2、JDK1.5的新特性的新特性泛型泛型JDK1.5之后出现了新的技术泛型,此技术的最大特点是类中的属性的类型可以由外部决定,而且在声明类的时候应该采用如下的形式:
class类名称那么现在使用如上的操作格式来修改之前的操作类。
packageorg.lxh.genericsdemo02;
publicclassPoint/表示坐标privateTx;
/x属性的类型由外部决定privateTy;
/y属性的类型由外部决定publicTgetX()returnx;
publicvoidsetX(Tx)this.x=x;
publicTgetY()returny;
publicvoidsetY(Ty)this.y=y;
此时,程序中加入了泛型操作之后,可以发现一切的操作类型此时都不再由程序固定设置,而是由实例化对象的时候在外部进行了指定。
publicclassGenDemo05publicstaticvoidmain(Stringargs)Pointp=newPoint();
p.setY(20);
intx=p.getX();
/取出x坐标北京北京MLDN软件实训中心软件实训中心联系电话:
010-51283346第(5)页共(15)页E-Mail:
inty=p.getY();
发现,此时在使用Point类的时候,需要加入一个属性类型的声明,而且加入之后再取出属性的时候本身也变得非常容易,不用再使用向下转型了。
而且,使用上面的操作有一点最方便之处,如果此时设置的内容不是整型,那么程序中将出现错误。
publicclassGenDemo06publicstaticvoidmain(Stringargs)Pointp=newPoint();
/错误,不能设置String类型intx=p.getX();
/取出x坐标inty=p.getY();
加入泛型之后,可以对程序的操作起到更加安全的目的。
3.3、泛型的其他注意点、泛型的其他注意点在使用泛型操作的时候,实际上有很多小的注意点,例如:
构造方法上依然可以使用泛型或者有一种称为泛型的擦除。
3.3.1、在构造方法上引用泛型、在构造方法上引用泛型一般开发中,经常使用构造方法设置属性的内容。
那么此时实际上构造方法上依然可以使用泛型的类型。
packageorg.lxh.genericsdemo03;
/y属性的类型由外部决定publicPoint(Tx,Ty)this.setX(x);
this.setY(y);
publicTgetX()returnx;
publicvoidsetX(Tx)北京北京MLDN软件实训中心软件实训中心联系电话:
010-51283346第(6)页共(15)页E-Mail:
this.x=x;
那么此时在调用的时候就需要使用构造方法设置内容,当然,设置的内容本身依然由泛型指定。
publicclassGenDemo07publicstaticvoidmain(Stringargs)Pointp=newPoint(10,20);
3.3.2、擦除泛型、擦除泛型如果在使用的时候没有指定泛型的话,则表示擦除泛型。
泛型一旦擦出之后,将按照Object进行接收,以保证程序不出现任何的错误。
publicclassGenDemo08publicstaticvoidmain(Stringargs)Pointp=newPoint(10,20);
但是在以上的操作代码中依然会存在警告信息,那么该如何去掉警告信息呢?
010-51283346第(7)页共(15)页E-Mail:
System.out.println(y的坐标是:
但是,以上的操作虽然去掉了警告信息,但是有些多余了,而且有些有搞笑。
3.4、通配符、通配符在泛型的操作中通配符使用较多,而且在日后的系统类库中有很多的地方都要使用这些操作