本人笔记:(源自张孝祥老师的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方法即可。
泛型是给编译器看的!
|