泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合进会去掉“类型”信息,使程序运行效率不受影响。
ArrayList<Integer> arrayList = new ArrayList<Integer>(); arrayList .add(10); arrayList .add(20); arrayList .getClass().getMethod("add",Object.class).invoke(arrayList ,"hbase"); System.out.println(arrayList .get(2));//虽然索引为2的位置存的是String类型,但编译时编译器会认为arrayList .get(2)返回的时是Integer类型,但在运行取值时取的仍是 //String类型
输出:hbase
ArrayList<String> arrayList = new ArrayList<String>(); arrayList1.add("hadopp"); arrayList1.add("hive"); arrayList1.getClass().getMethod("add",Object.class).invoke(arrayList1,25); System.out.println(arrayList1.get(2));//虽然索引为2的位置存的是Integer类型,但编译时编译器会认为arrayList .get(2)返回的时是String类型,但在运行取值时取的仍 //Integer类型
报错!! Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at com.mobin.generic.GenericTest.main(GenericTest.java:20)
原文:http://www.cnblogs.com/MOBIN/p/4773603.html