集合框架-泛型概述及擦除补偿_强制转换集合框架-泛型概述及擦除补偿_强制转换_02
 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 }
Generic
集合框架-泛型概述及擦除补偿_强制转换集合框架-泛型概述及擦除补偿_强制转换_02
 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>();
泛型