浏览 6727 次
锁定老帖子 主题:利用java反射机制执行类的方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-03
最后修改:2009-07-03
写个例子来演示下: package reflection; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; public class DumpMethods { public static void main(String args[]) { String className = "reflection.DumpMethods"; try { Class c = Class.forName(className); Class ptypes[] = new Class[2]; ptypes[0] = Class.forName("java.lang.String"); ptypes[1] = Class.forName("java.util.List"); Method m = c.getMethod("func",ptypes); Object obj = (Object)c.newInstance(); Object arg[] = new Object[2]; arg[0] = new String("Hello world"); List list = new ArrayList(); list.add("val1"); list.add("val2"); arg[1] = list; Object r = m.invoke(obj, arg); System.out.println(r.toString()); } catch (Throwable e) { System.err.println(e); } } public String func(String s, List list){ System.out.println("func invoked"); for(int i=0;i<list.size();i++){ s = s+" "+list.get(i).toString(); } return s; } } 运行结果: func invoked Hello world val1 val2 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-03
反射 是一个 好东西,它让JAVA更灵活,
不过考虑到效率 最好不要大量使用, |
|
返回顶楼 | |
发表时间:2009-07-04
ASM CGLIB的使用已经可以提高很多了
|
|
返回顶楼 | |
发表时间:2009-07-04
fjlyxx 写道 ASM CGLIB的使用已经可以提高很多了
效率提高很多吗? 为什么?它不用反射机制吗? |
|
返回顶楼 | |
发表时间:2009-07-05
没有反射就没有框架,反射是java的灵魂
|
|
返回顶楼 | |
发表时间:2009-07-13
反射的使用也是有策略的麻,反射给java带来了动态和灵活,mvc框架处理请求转发也都是使用反射。
虽说反射消耗性能,但不能代表我们不能用灵活的办法去规避性能问题,使用缓存机制,将已经反射得到的东西放在内存中,就能灵活的规避效率的损耗。我们接受不了每次都用反射,却可以接受一次反射而永远受用的方式。 cglib封装了asm,可以在运行期动态生成新的class,这个跟反射不能成为对比关系吧?(弱弱的问下 :〉) 反射貌似在pojo对象 克隆 也能起到很好的运用,beanutils就是采用这样的方式去克隆对象。 动态的将对象序列化成某个指定格式的形式(例如指定格式的xml)也能通过反射获得很多开发上的便洁。 动态代理使用反射在刚开始确实给人眼前一新的感觉,其方便灵活的实现aop确实带给人震撼的感受,但由于效率的问题貌似实际使用并不多见。 |
|
返回顶楼 | |
发表时间:2009-07-13
lian 写道 没有反射就没有框架,反射是java的灵魂
反射是必须掌握的,大到j2ee容器的实现,小到一个可插接的结构,到处都是反射。 |
|
返回顶楼 | |
发表时间:2009-07-25
我个人的习惯
一, 在系统启动时, 比如你用到Annotation时, 可以在初始化的时候进行扫描. 二, 你的代码想要通用性 |
|
返回顶楼 | |
发表时间:2009-07-25
谁发一个详细点的反射过程看看
|
|
返回顶楼 | |