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           //類型檢查就是針對引用的,誰是一個引用,用這個引用調用泛型方法,就會對這個引用調用的方法進行類型檢測,而無關它真正引用的對象。     } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章