黑马程序员技术交流社区
标题:
反射中的一个小问题
[打印本页]
作者:
庄纪光
时间:
2011-10-15 08:46
标题:
反射中的一个小问题
如何在数组ArrayList<Integer>中添加一个String类型的元素?要用到反射的知识,不是很明白。求解答!
作者:
黄锋
时间:
2011-10-15 09:55
List<Integer> list=new ArrayList<Integer>();
Method methodAdd=list.getClass().getMethod("add", Object.class);//用Method反射你要用的方法
methodAdd.invoke(list, "hello");
System.out.println(list.get(0));
作者:
724681149
时间:
2011-10-16 15:39
回答这个问题我们得先明白一下两点:
泛型的作用:可以在编译器对存入容器的元素类型做限制的作用。
反射的特性:反射可以绕过编译器的检查,进入运行期,而再运行期泛型就失效了。
反射的一个很重要的作用就是你说的这道题中得到了体现。
作者:
朱华
时间:
2011-10-17 13:59
纯手打,请区分。
具体的代码就不贴了,楼上贴过,视频里也有。
还记得异常吗,异常分为编译时异常以及运行时异常,指的是当你在编译阶段就出现的错误编译器会给你指出来,但是编译结束,程序在运行时的错误编译器就无法识别了,因为那是动态的,所以你忽略了一句话,泛型的检查只在编译期有效,所以当你使用反射的方法往里面设值的时候,编译器是无非检查你在运行时放入的值类型的,所以你可以在一个List<Integer>中放入String
作者:
刘江华
时间:
2011-10-18 23:20
类型限定只是在编译的时候才有用。但程序运行。在内存中变成字节码的时候,就没有类型限定啦。反射就是在程序运行的时候工作。这样就可以将不同的类型插入进去了。
作者:
巴蜀贤君
时间:
2011-10-19 09:54
追根溯源,我们知道在一个类中的属性,在堆内存中是以字节码的形式存储的,是没有具体的类型的,因此数组ArrayList<Integer> 和 String类型的元素,在堆内存中的类型都是Class类型,所以只要我们获得了他们的字节码文件就可以实现添加操作了。获取字节码文件的方式:1.使用Class类的forName()静态方法;2.调用某个类的class属性;3.调用某个对象的getClass()方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2