集合框架-泛型概述及擦除补偿
1 package cn.itcast.p1.generic.demo; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 6 public class GenericDemo { 7 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 ArrayList<String> al = new ArrayList<String>();//编译时就能发现类型错误 11 // ArrayList al = new ArrayList(); 12 13 al.add("abc");//public boolean add(Object obj) 14 al.add("hahah"); 15 16 // al.add(4);// java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String 17 Iterator<String> it = al.iterator(); 18 while(it.hasNext()) { 19 String str = it.next(); 20 System.out.println(str); 21 } 22 // Class clazz = "aa".getClass();擦除补偿 23 // clazz.getName(); 24 } 25 26 }
1 泛型: 2 jdk1.5出现的安全机制。 3 4 好处: 5 1,将运行时期的问题ClassCastException转到了编译时期。 6 2,避免了强制转换的麻烦 7 8 <>:什么时候用?当操作的引用数据类型不确定的时候。就使用<>。将要操作的引用数据类型传入即可 9 其实<>就是一个接收具体引用数据类型的参数范围。 10 11 在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型。 12 13 泛型技术是给编译器使用的技术,用于编译时期。确保了类型安全 14 15 运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。 16 为什么擦除呢?因为为了兼容运行的类加载器。 17 18 泛型的擦除补偿:在运行时,通过获取元素的类型进行转换动作。不用使用者再强制转换了 19 void show(int x,int y) 20 21 class Tool<e1,e2,e3,e4> 22 23 24 例如 Tool<String,Demo,Person,Integer> t = new Tool<String,Demo,Person,Integer>();