通過反射了解集合泛型的本質
阿新 • • 發佈:2019-01-29
通過Class,Method來了解泛型的本質,
先new 兩個List:
ArrayList list = new ArrayList();
ArrayList<String> list1 = new ArrayList<String>();
list1.add("hello");這是沒有問題的,而list1.add(20);錯誤的,因為泛型限制了資料型別,再來看:
Class c1 = list.getClass();
Class c2 = list1.getClass();
System.out.println(c1 == c2);
可以得到結果為true,即c1=c2,我們知道,反射的操作是編譯之後的操作,這說明編譯之後集合的泛型是去泛型化的,由此,我們可以下一個結論:Java中集合的泛型,是為了防止錯誤輸入的,只在編譯階段有效,繞過編譯就無效了Method m = c1.getMethod("add", Object.class);
m.invoke(list1, 100);
System.out.println(list1.size());
這時候我們看輸出結果,size加了1,說明資料已經加進去了,由此證明了我們的結論是正確的。