黑马程序员技术交流社区

标题: 反射中的invoke方法 [打印本页]

作者: sabrina妖儿    时间: 2015-11-16 14:58
标题: 反射中的invoke方法
这个方法是可以调用底层的方法:
/*3、
* ArrayList<Integer> list = new ArrayList<Integer>();
            在这个泛型为Integer的ArrayList中存放一个String类型的对象。
* @author sabrina
*/
public class Test3 {
        public static void main(String[] args) throws Exception {
                ArrayList<Integer> list = new ArrayList<Integer>(); //已经规定集合里面装Integer了
//                 获得字节码
                Class<? > clz = list.getClass();
                //得到方法               
                Method madd = clz.getDeclaredMethod("add",Object.class);//改变方法接受的的类型
                Method mRemove = clz.getDeclaredMethod("remove",Object.class);//改变方法接受的的类型
//                m1.setAccessible(true);
                madd.invoke(list, "添加nihao");
                madd.invoke(list, "添加我是字符串");
                madd.invoke(list, "添加完成");
                for (Object i : list) {
                        System.out.println(i);
                       
                }
                System.out.println("===============我是分隔线===================");
                mRemove.invoke(list, "添加nihao");
                mRemove.invoke(list, "添加我是字符串");
                for (Object i : list) {
                        System.out.println(i);
                       
                }
               
               
        }

}
例子中:ArrayList<Integer> list已经定义了这个list集合中只能添加Integer 对象。但是我们用了add 和remove两个方法。 如果用invoke的话,就可以调用Arraylist 父类的父类。。。。的更底层的方法,这样子就不必遵循他本身只能添加Integer的规则。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2