黑马程序员技术交流社区

标题: 看到day15(泛型),不是很理解,那位大神讲解下,谢谢 [打印本页]

作者: 王亚运    时间: 2012-10-21 17:10
标题: 看到day15(泛型),不是很理解,那位大神讲解下,谢谢
本帖最后由 王亚运 于 2012-10-21 20:17 编辑

如题,看到day15  
泛型讲的,不是很懂,
想到了多态。现在一片糊涂。。
哪位,能用通俗讲法讲解一下?
谢谢



作者: 张忠豹    时间: 2012-10-21 18:40
本人笔记:(源自张孝祥老师的java基础加强)
泛型:就像是一件外衣,最主要的作用还是在编译阶段。当编译完成,这件外衣被脱掉了,运行的时候,也就是咱们硬盘上的.class文件被加载至内存,与泛型没有任何关系。
1、jdk1.5以前,泛型没出现前,容易出现的问题
ArrayList list= new ArrayList(); list.add(1);list.add(1L);list.add(“name”)
int I = (Integet)list.get(1)//在编译时候强制类型转换且运行时出错
2、jdk1.5的集合类希望在定义集合是,明确表示你要向集合中装哪种类型的数据,无法加入指定类型以外的数据
ArrayList list<Integer>= new ArrayList<Integer> (); list.add(1);list.add(1L);//编译时会出错         int i = list.get(0);//不需要类型转换
总结1、2知道:
没有使用泛型时,只要是对象,不管是什么类型的对象,都可以存储到同一个集合中。使用泛型集合,可以将一个集合中的元素限定为一个特定类型,集合中只能存储同一个类型的对象,这样更安全;并且当从集合中获取一个对象时,编译器也可以知道这个对象的类型,不需要对对象进行强制类型转换,这样更方便。
        3、泛型的作用
泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉“类型”信息,使程序运行效率不受影响,对于参数化的泛型类型,getClass( )方法的返回值和原始类型完全一样。由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其它类型的数据,例如,用反射得到集合,再调用add方法即可。
泛型是给编译器看的!

作者: 王亚运    时间: 2012-10-21 19:36
张忠豹 发表于 2012-10-21 18:40
本人笔记:(源自张孝祥老师的java基础加强)
泛型:就像是一件外衣,最主要的作用还是在编译阶段。当编译 ...

:handshake
受教了。。。
笔记很好
谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2