Java中利用Reflection API优化代码 - 编程入门网
单:产生的代码通常是更便于开发者阅读和调试。
.编译过程的错误: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的代码产生对象的例子:
基类MethodCode完成全部的工作。在代码产生的过程中,MethodCode类决定方法名字以及用作实现的框架代码。MethodForInt类只需要为它的方法定义所有的数据规范。其中最重要的部分是getImplBody(CodeBuilder builder) 方法。这就是定义函数的地方。getInputParameters()和 getInstanceParameters()这两个方法定义函数的签名。函数签名不但声明了函数,而且还定义了如何在其它函数中调用它。MethodForInt类在代码产生时产生以下的代码:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |