全部博文(2065)
分类: Java
2010-06-14 23:05:22
java中的泛型一
时间:
一、Java中的泛型
在JAVA里面能够用到泛型最多的是容器类。如各种list map set等。因为JAVA是单根继承的所以容器里面可以放的内容是任何Object,所以从意义上来讲原本的设计才是泛型。如果我们经常使用JAVA我们发现需要强制转型。比如说提取的时候是Object的然后呢
List a =
(List)b.getObject(); 诸如出现这样的表达式就是一种强制转型的过程!
转得要不好的话容易出现cast异常什么的。挺头疼的。所以JDK1.5开始引入泛型进来。
二、泛型的用法
实例A。
ArrayList
strList.add("1");
strList.add("2");
String string = strList.get(1);//没有作类型转换了
System.out.println(string);
strList.add(new Object());//直接报编译错误
这个其实我们平时经常会用到的。就是一个容器里面我们存放的数据类型是明确的。到时我们在存储数据的时候就指定类型存储。就不会出现这种数据转换错误的了!
三、一家之言
JDK引入泛型第一个要解决的问题就是 从此以后我们不需要再进行强制类型转换了哦!
四、Boxing和UnBoxing
基础类型放到容器里面去不需要再先包装,取回来的时候还得先转了再提取了。
ArrayList
strList.add(1);
strList.add(2);
int j = strList.get(1);
System.out.println(j);
看到没有这里面我们没有进行包装吧。即整数还是整数的。不需要先包装的!
五、
泛型的生命周期(使用的注意事项)
在泛型的实现上,C++和Java有着很大的不同,
Java是擦拭法实现的
C++是膨胀法实现的
因为Java原本实现就是泛型的,现在加入型别,其实是"窄化",所以采用擦拭法,在实现上,其实是封装了原本的
ArrayList,这样的话,对于下边这些情况,Java的实现类只有一个。
1ArrayList
2ArrayList
3ArrayList
4而C++采用的是膨胀法,对于上边的三种情况实际是每一种型别都对应一个实现,实现类有多个
5list<int> li; class list; //int 版本
6list
7list<double> ld; class list; //double 版本
这就造成了,在序列化后,Java不能分清楚原来的ArrayList是
ArrayList
如果我们试着把ArrayList