package com.imooc.reflect;
import java.lang.reflect.Method;
import java.util.ArrayList;
public class MethodDemo4 {
?? ?/**
?? ? * @param args
?? ? */
?? ?public static void main(String[] args) {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?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);
?? ??? ?//反射的操作都是編譯之后的操作
?? ??? ?/*
?? ??? ? *
?? ??? ? * c1 == c2 結果返回true說明編譯之后集合的泛型是去泛型化的
?? ??? ? * Java中集合的泛型是防止錯誤輸入,只在編譯階段有效,繞過編譯就無效的
?? ??? ? * 驗證:我們可以通過方法的反射繞過編譯來操作
?? ??? ? */
?? ??? ?try {
?? ??? ??? ?Method m = c1.getMethod("add", Object.class);
?? ??? ??? ?m.invoke(list1,100);//繞過編譯操作就繞過了泛型
?? ??? ??? ?System.out.println(list1.size());
//?? ??? ??? ?for (String string : list1) {
//?? ??? ??? ??? ?System.out.println(string);
//?? ??? ??? ?} //現(xiàn)在不能這樣遍歷
?? ??? ?} catch (Exception e) {
?? ??? ??? ?// TODO Auto-generated catch block
?? ??? ??? ?e.printStackTrace();
?? ??? ?}
?? ?}
}

原來我叫小土慕課網給我改了名字
2014-11-01
0 回答
舉報
0/150
提交
取消