快速业务通道

Java中利用Reflection API优化代码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
以概括为以下几步:

1、解释:一个影射决定你在构造一个对象时需要些什么

2、请求数据:要满足构造的需要,要进行一个调用来得到数据

3、拖:数据由源中得到。

4、推:数据被填充入一个对象的新实例

5、如果必要的话,重复步骤1

你需要以下的类来满足以上的步骤:

.数据类(Data classes):由ASCII文件中的数据实例化。类定义提供数据的影射。数据类必须满足以下的条件:

.它们必须包含有一个构造器来接收全部必需的参数,以使用一个有效的状态来构造对象;

.它们必须由对象构成,这些对象是reflective过程知道如何处理的

.对象装载器(Object loader):使用reflection和数据类作为一个影射来载入数据。产生数据请求。

.载入管理器(Load manager):作为对象装载器和数据源的中介层,将对数据的请求转换为一个数据指定的调用。这可以令对象载入器做到与数据源无关。通过它的接口和一个可载入的类对象通信。

.数据循环接口(Data iterator interface):载入管理器和载入类对象使用这个接口来由数据源中得到数据。

一旦你创建了支持的类,你就可以使用以下的声明来创建和影射一个对象:

FooFileIterator iter = new FooFileIterator(fileLocation, log); LoadManager manager = new FooFileLoadManager(iter); SubFooObject obj = (SubFooObject)ReflectiveObjectLoader.initializeInstance(SubFooObject.class, manager,log);

通过这个处理,你就创建了一个包含有文件内容的SubFooObject实例。

局限

开发者必须决定使用哪个方案来解决问题是最好的;通常做出这个决定是最困难的部分。在考虑使用reflection作数据配置时,你要考虑到以下一些限制:

1、不要令一个简单的问题复杂化。reflection是比较复杂的,因此在必要的时候才使用它。一旦开发者明白了reflection的能力,他就想使用它来解决所有的问题。如果你有更快、更简单的方案来解决问题时,你就不应该使用reflection(即使这个更好的方案可能使用更多的代码)。reflection是强大的,但也有一些风险。

2、考虑性能。reflection对性能的影响比较大,因为要在运行时发现和管理类属性需要时间和内存。

重新评估方案

如上所述,使用运行时reflection的第一个限制是“不要令简单的问题复杂化”。在使用reflection时,这是不可避免的。将reflection和递归结合起来是一个令人头痛的问题;重新看代码也是一件可怕的事情;而准确决定代码的功能也是非常复杂的。要知道代码的准确作用的唯一方法是使用一些取样数据,逐行地看,就象运行时一样。不过,对于每个可能的数据组合都使用这种方式几乎是不可能的。在这种情况下,使用单元测试代码可能有些帮助,不过也很可能出现错误。幸运的是,还有一个可选的方法。

Java中利用Reflection API优化代码(3)

时间:2010-12-19

可选的方法

由上面列出的限制可以看到,在某些情况下,使用reflective载入过程可能是得不偿失的。代码产生提供了一个通用的选择方法。你也可以使用reflection来检查一个类并且为载入过程产生代码。

Andrew Hunt和David Thomas介绍了两类的代码产生器,见The Pragmatic Programmer(http://www.javaworld.com/javaworld/jw-11-2001/jw-1102-codegen-p2.html#resources)

1、Passive(被动):被动的代码产生器在实现代码时需要人工的干预。许多的IDE(集成开发环境)都提供相应的向导来实现。

2、Active(主动):主动的代码产生指的是代码一旦创建,就不再需要修改了。如果有问题产生,这个问题也应该在代码产生器中解决,而不是在产生的源文件中解决。在理想的情况下,这个过程应该包含在编译的处理过程中,从而确保类不会过期。

代码产生的优点和缺点包含有以下方面:

优点:

.简

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号