文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>java中的泛型一[转载]

java中的泛型一[转载]

时间:2010-06-14  来源:hkebao

java中的泛型一

时间:2010-6-13

一、Java中的泛型

在JAVA里面能够用到泛型最多的是容器类。如各种list map set等。因为JAVA是单根继承的所以容器里面可以放的内容是任何Object,所以从意义上来讲原本的设计才是泛型。如果我们经常使用JAVA我们发现需要强制转型。比如说提取的时候是Object的然后呢

List a = (List)b.getObject();   诸如出现这样的表达式就是一种强制转型的过程!

转得要不好的话容易出现cast异常什么的。挺头疼的。所以JDK1.5开始引入泛型进来。

 

二、泛型的用法

实例A。

ArrayList<String> strList = new ArrayList<String>();

        strList.add("1");

        strList.add("2");

        String string = strList.get(1);//没有作类型转换了

        System.out.println(string);

        strList.add(new Object());//直接报编译错误

这个其实我们平时经常会用到的。就是一个容器里面我们存放的数据类型是明确的。到时我们在存储数据的时候就指定类型存储。就不会出现这种数据转换错误的了!

 

 

三、一家之言

JDK引入泛型第一个要解决的问题就是 从此以后我们不需要再进行强制类型转换了哦!

 

四、Boxing和UnBoxing

基础类型放到容器里面去不需要再先包装,取回来的时候还得先转了再提取了。

ArrayList<Integer> strList = new ArrayList<Integer>();

        strList.add(1);

        strList.add(2);

        int j = strList.get(1);

        System.out.println(j);

看到没有这里面我们没有进行包装吧。即整数还是整数的。不需要先包装的!

 

五、  泛型的生命周期(使用的注意事项)

在泛型的实现上,C++和Java有着很大的不同,
Java是擦拭法实现的
C++是膨胀法实现的
因为Java原本实现就是泛型的,现在加入型别,其实是"窄化",所以采用擦拭法,在实现上,其实是封装了原本的
ArrayList,这样的话,对于下边这些情况,Java的实现类只有一个。

1ArrayList<Integer>  .;   public class ArrayList
2ArrayList<String>  ..;   --同上--
3ArrayList<Double>  ..;   --同上--
4而C++采用的是膨胀法,对于上边的三种情况实际是每一种型别都对应一个实现,实现类有多个
5list<int> li;                class list; //int 版本
6list<string> ls;             class list; //string 版本
7list<double> ld;             class list; //double 版本    

这就造成了,在序列化后,Java不能分清楚原来的ArrayList是
ArrayList<Integer>还是ArrayList

如果我们试着把ArrayList<String> list的内容序列化,然後再读取出来,在使用的过程中会发现出错,为什么呢?用Stream读取一下回来的数据,你会发现<String>不见了,list变成了普通的ArrayList,而不是参数化型别的ArrayList了。

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载