黑马程序员技术交流社区

标题: 反射有些疑惑 [打印本页]

作者: 楞个里格朗    时间: 2013-9-3 10:12
标题: 反射有些疑惑
反射是一种可以反映代码自身的一些方法或者属性的方法,在实际开发中会比实现了相同功能的代码更消耗资源,那么有什么意义呢?
作者: 武嘉豪    时间: 2013-9-3 10:34
反射其实就是程序能够自检查自身信息。就像程序会照镜子反光看自己。

在程序中可以检查某个类中的方法属性等信息,并且能够动态调用。
这样可以写出很灵活的程序。
比如要把一个对象中的数据copy到另外一个对象中,规则是属性名相同就copy,
就可以用反射来做,不需要指定每个属性的名字,只要动态从类中取得信息,
再判断属性名是否相同即可。当然应用还有很多。

反射可以结合Java的字节码,使用ASM和cglib等库,还能动态生成类。
作者: 吴光新    时间: 2013-9-3 14:54
框架就要用到反射,动态代理、类加载器...哪里不用到反射?意义很大哦 亲
作者: 静以修身    时间: 2013-9-5 15:02
想到了之前做的一道编程题,这道题要用反射才能解决:
ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象

public class Test3 {

        public static void main(String[] args)
        {
                ArrayList<Integer> list = new ArrayList<Integer>();
                Method method = null;
                method = list.getClass().getMethod("add",Object.class); //通过反射,获得指定的方法add()
                String str = "I am a string type";
                method.invoke(list,str);//调用方法对象的invoke方法运行指定方法方法add(),参数中的list为所属的对象,str为方法的实际参数。
        }
}

反射有缺点,就像你说的,但优点更明显,能解决一些其它技术所不能解决的问题。它增强了程序的扩展性和灵活性。好处还是大大滴!!!
作者: 杨增坤    时间: 2013-9-5 20:12
楼主 你的问题如果解决了!



请把您的问题的"未解决"更改为"已解决"!



谢谢合作!






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