黑马程序员技术交流社区

标题: 反射的一个问题 [打印本页]

作者: 王振2014    时间: 2014-6-23 16:32
标题: 反射的一个问题
假如有一个Person类,我们想要用反射来调用它的getName(String name)方法,它返回一个字符串
Class c = Person.class;
Method m = c.getMethod("getName",String.class);
然后使用invoke方法,但是他需要一个对象参数
object obj = (Person)c.newInstance();
String name = (String) m.invoke(obj,"wang");
我不明白的是都已经实例化一个对象obj了,直接obj.getName("wang")不就O了,为啥还费劲啊。



作者: 123_yaya    时间: 2014-6-23 16:58
反射是做框架用的,你在写框架的时候还不知道你要用到的对象有什么方法。框架是先于你写这个Person类先写好的。
作者: 赵洋洋    时间: 2014-6-23 17:29
不怎么明白
作者: 王振2014    时间: 2014-6-24 09:57
123_yaya 发表于 2014-6-23 16:58
反射是做框架用的,你在写框架的时候还不知道你要用到的对象有什么方法。框架是先于你写这个Person类先写好 ...

澳,这种情况只是针对类的继承吧,比如我们新写的类继承原有的抽象类;
如果是接口的话,只能覆写原有的方法吧,类才能写自己的方法。
对不对啊?
作者: 123_yaya    时间: 2014-6-24 11:28
王振2014 发表于 2014-6-24 09:57
澳,这种情况只是针对类的继承吧,比如我们新写的类继承原有的抽象类;
如果是接口的话,只能覆写原有的 ...

有点看不懂你说的是什么,不知道有没有理解错。
不是只能针对类的继承哦,这是反射的一种应用情况。对于一个对象,你要增强该对象的某个特定方法,你可以用代理,继承,装饰设计模式。用代理的好处是你可以简化代码,只对于你要增强的那个特定方法进行处理即可,其他都是用原来的方法。
反射可以用作框架的一个例子就是,你写一个开源的将封装在List集合里面的数据导出到Excel中,这时候你是先写好这个框架,别人用的时候只需要把List传进来即可。但是你写框架导出excel的时候,你要知道List里面的封装数据是哪些啊?这时候你就要用到反射把List里面的方法反射出来来获得数据。同样你要用别人的框架你就要遵循别人的一些规则,比如你封装在LIst集合中的数据要实现哪些方法啊之类的。这就是框架。
个人理解哦。。有错欢迎指点~~~
作者: 王振2014    时间: 2014-6-24 12:05
123_yaya 发表于 2014-6-24 11:28
有点看不懂你说的是什么,不知道有没有理解错。
不是只能针对类的继承哦,这是反射的一种应用情况。对于 ...

谢谢指导
作者: 王振2014    时间: 2014-6-24 12:08
123_yaya 发表于 2014-6-24 11:28
有点看不懂你说的是什么,不知道有没有理解错。
不是只能针对类的继承哦,这是反射的一种应用情况。对于 ...

顺便问一下面试和面试前的测试题有没有类加载机制和代理的题啊
作者: 123_yaya    时间: 2014-6-24 12:13
王振2014 发表于 2014-6-24 12:08
顺便问一下面试和面试前的测试题有没有类加载机制和代理的题啊

我没被问到~~~不知道其他人噢。高新我看了两遍写了两遍的~~~其实觉得张老师说得很好啊~~特别类加载器看第二遍时好很多了。




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