反射與泛型
阿新 • • 發佈:2018-12-05
先說結論:
1、java中的泛型是防止錯誤輸入的,只在編譯階段有效,過了編譯階段就無效了;
2、編譯之後的泛型是去泛型化的;
實現功能:
在String型別的List中新增int型別資料
實現邏輯:通過方法的反射實現
public static void main(String[] args) { ArrayList list = new ArrayList(); ArrayList<String> list1 = new ArrayList<>(); list1.add("hello world!"); //list1.add(20); 報錯 Class a = list.getClass(); Class b = list1.getClass(); System.out.println(list == list1);//false System.out.println(a == b);//true try { Method method = b.getMethod("add", Object.class);//方法的反射 //繞過編譯操作,就繞過了泛型限制 method.invoke(list1,20); System.out.println(list1); //如果此時foreach遍歷,會報錯 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String for (String string: list1) { System.out.println(string); } } catch (Exception e) { e.printStackTrace(); } }
資訊源(慕課網):https://www.imooc.com/video/3738