java泛型

import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import org.junit.Test; public class FanXing {     @Test     public void test1() {         List arrayList1 = new ArrayList();         arrayList1.add("abc");         List arrayList2 = new ArrayList();         arrayList2.add(123);         System.err.println(arrayList1.getClass() == arrayList2.getClass());          //        我们定义了两个ArrayList数组,不过一个是ArrayList泛型类型,只能存储字符串。 //         一个是ArrayList泛型类型,只能存储整形。 //         最后,我们通过arrayList1对象和arrayList2对象的getClass方法获取它们的类的信息, //         最后发现结果为true。说明泛型类型String和Integer都被擦除掉了,只剩下了原始类型。               }          //关于泛型变量的使用,是会在编译之前检查的。     @Test     public void test2(){         try {             List arrayList3 = new ArrayList();             arrayList3.add(1);// 这样调用add方法只能存储整形,因为泛型类型的实例为Integer             //arrayList3.getClass().getMethod("add", Object.class).invoke(arrayList3, "asd");             Method method=arrayList3.getClass().getMethod("add", Object.class);             method.invoke(arrayList3, "asdf");                          for (int i = 0; i < arrayList3.size(); i++) {                 System.err.println("第"+i+"个元素==="+arrayList3.get(i));             }         } catch (Exception e) {             e.printStackTrace();         }              }          @Test     public void test3(){         ArrayList arrayList1 = new ArrayList();         arrayList1.add("1");// 编译通过         //arrayList1.add(1);// 编译错误         String str1 = arrayList1.get(0);// 返回类型就是String         ArrayList arrayList2 = new ArrayList();         arrayList2.add("1");// 编译通过         arrayList2.add(1);// 编译通过         Object object = arrayList2.get(0);// 返回类型就是Object         new ArrayList().add("11");// 编译通过         //new ArrayList().add(22);// 编译错误         String string = new ArrayList().get(0);//返回类型就是String           //类型检查就是针对引用的,谁是一个引用,用这个引用调用泛型方法,就会对这个引用调用的方法进行类型检测,而无关它真正引用的对象。     } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章