通過Class,Method來認識泛型的本質

package com.etoak.reflect;


import java.lang.reflect.Method;
import java.util.ArrayList;


public class MethodDemo4 {


public static void main(String[] args) {
//能放任何類型
ArrayList list = new ArrayList();

ArrayList<String> list1 = new ArrayList<String>();
list1.add("hello");
//list1.add(10);
Class c1 = list.getClass();
Class c2 = list1.getClass();
System.out.println(c1==c2);
//反射的操作都是編譯之後的操作
//c1==c2結果返回true說明編譯之後集合的泛型是去泛型化的。
//java中集合的泛型是防止錯誤輸入的,只在編譯階段有效,繞過編譯就無效了。
//驗證:我們可以通過方法的反射來操作,繞過編譯。
try {
Method m = c1.getMethod("add",Object.class);
m.invoke(list1, 100);//繞過編譯操作,就繞過了泛型
System.out.println(list1.size());
System.out.println(list1);
} catch (Exception e) {
// TODO: handle exception
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章