快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
单:产生的代码通常是更便于开发者阅读和调试。

.编译过程的错误:Reflexive在运行时出现错误的机会要比编译的期间多。例如,改变被载入的对象将有可能令产生的载入类抛出一个编译的错误,不过reflexive过程将不会看到任何的区别,直到在运行时遇到这个类。

缺点:

.维护:使用被动的代码产生,修改被载入的对象将需要更新或者重新产生载入的类。如果该类被重新产生,那么自定义的东西就会丢失。

回头再来看看主动代码产生的好处

在这里我们可以看到在运行时使用reflection是不可以接受的。主动的代码产生有着reflection的全部好处,但是没有它的限制。还可以继续使用reflection,不过只是在代码的产生过程,而不是运行的过程。理由如下:

1、更少冒险:运行时的reflection明显是更冒险的,特别是问题变得复杂的时候。

2、基于单元测试,但并不是编译器

3、多功能性:产生的代码有着runtime reflection的全部好处,而且有着runtime reflection没有的好处。

4、更易懂:虽然经过多次的处理,但是将递归和reflection结合仍然是很复杂的。产生源代码的方式更加容易解释和理解。代码产生过程需要递归和reflection,但得到的结果是可查看的源代码,而不是难以理解的东西。

写代码产生器

要写一个代码产生器,在思考的时候,你不能只是简单地编写一个方案来解决一个问题,你应该看得更远。代码产生器(以及reflection)需要你作更多的思考。如果你只是使用runtime reflection,你就不得不在运行时概念化问题,而不是使用简单、兼容性好的源代码来解决问题。代码产生要求你从两个方面来查看问题。代码产生过程会将抽象的概念转变为实际的源代码。Runtime reflection则一直是抽象的。

代码产生过程将你的思考过程转变为代码,然后产生并且编译代码。编译器会让你知道你的思考过程在语法上是否正确;单元测试则可以验证代码在运行时的行为。就动态特性方面,runtime reflection就不能达到这个级别的安全性。

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

时间:2010-12-19

代码产生器

在经历后几次失败的设计后,我认为最简单的方法是:在载入过程中,为每一种需要实例化的类产生一个方法。一个方法工厂产生每个特别类的正确方法。一个代码编译对象缓冲来自代码工厂的方法请求,以产生最终源代码文件的内容。

MethodCode对象是代码产生过程的核心。以下就是一个int的代码产生对象的例子:

public class MethodForInt extends MethodCode { private final static MethodParameter param = new MethodParameter(SimpleFileIterator.class, "parser"); public MethodForInt(Class type, CodeBuilder builder){ super(type, builder); } public MethodParameter[] getInputParameters(){ return new MethodParameter[]{ param }; } public MethodParameter[] getInstanceParameters(){ return getInputParameters(); } protected String getImplBody(CodeBuilder builder){ return "return " + param.getName() + ".nextInt(); "; } }

基类MethodCode完成全部的工作。在代码产生的过程中,MethodCode类决定方法名字以及用作实现的框架代码。MethodForInt类只需要为它的方法定义所有的数据规范。其中最重要的部分是getImplBody(CodeBuilder builder) 方法。这就是定义函数的地方。getInputParameters()和 getInstanceParameters()这两个方法定义函数的签名。函数签名不但声明了函数,而且还定义了如何在其它函数中调用它。MethodForInt类在代码产生时产生以下的代码:

/** Generated Load method for int**/ final public static int loadint(com.thoughtworks.rettig.util.SimpleFileIterator pars

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

分享到: 更多
你可能对下面的文章感兴趣
    HTTP/1.1 401 Access Denied

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号