快速业务通道

java反射机制系列(三)例子分析 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

java反射机制系列(三)例子分析

时间:2011-09-24

上一篇中,通过例子我们知道了如何利用反射机制创建对象,获得类变量和调用方法等。创建对象的语句是 Class cla = Class.forName(type);  Object obj = cla.newInstance(); 这里newInstance()实际上是使用了该类的默认无参构造方法。如果我们要调用其它的构造方法就要稍微复杂一点。比如我们要创建一个StringBuffer对象,用new 操作符应该是StringBuffer br = new StringBuffer("example");用反射机制则要有以下步骤。

首先,获得StringBuffer类的描述。

Class cla = Class.forName("java.lang.StringBuffer");

其次,要创建参数类型数组Class[] 。

Class[] paraTypes = new Class[1];paraTypes[0]=String.class;

然后,通过cla 和 paraTypes 获得Constructor 对象。

Constructor constructor = cla.getConstructor(paraTypes);

接着,创建传入的参数列表Object[]。

Object[] paraLists = new Object[1]; paraLists[0]="color";

最后,得到我们所要得对象。Object obj = constructor.newInstance(paraLists);

如果我们paraTypes及paraLists设为null或长度为0,就可以用上述步骤调用StringBuffer的无参构造方法。类似地,我们可以调用对象中的有参方法。比如我们做如下操作br.insert(4, ''u'');用反射机制实现如下。

Class[] paratypes = new Class[]{int.class,char.class}; Method method = cla.getMethod("insert", paratypes); Object[] paralists = new Object[]{4,''u''}; method.invoke(obj, paralists);

反射机制给予我们运行时才确定对象类型的便利,然而它也有显著的缺点。

1,代码笨拙冗长。比如本来一句br.insert(4, ''u'');可以解决的问题现在要用到四句。

2,损失了编译时类型检查的好处。这使得你要对付更多的异常。

3,性能损失。用反射机制运行的时间更久。

<<Effective Java >>中给出的建议是“普通应用不应在运行时刻以映像方式访问对象,只是在很有限的情况下使用“。那么在什么地方会用到反射机制呢。已有的较熟悉应用是我们的IDE及一些框架。比如eclipse,编程时ctrl+space弹出的建议就是用到反射机制。比如Spring读取配置文件后生成对应的对象。还有RPC系统也会用到。对于一般的应用软件,你可以在工厂方法中用到它。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号