Java编程的动态性,第5部分: 动态转换类 - 编程入门网
称和类型进行真正灵活的比较――简单的相等比较就能处理我感兴趣的大多数情况 ,而对该比较添加基本的通配符就能处理其余的所有情况了。处理这种情况的最容易方法是 使模式看起来像标准的 Java 方法声明,另外再进行一些扩展。
关于这种方法的例子,下面是几个与 test.StringBuilder 类的 String buildString (int) 方法相匹配的模式:
这些模式的通用模式首先是一个可选的返回类型(具有精确的文本),然后是组合起来的 类和方法名称模式(具有“*”通配字符),最后是参数类型列表(具有精确的文本)。如果 提供了返回类型,必须使用一个空格将它与方法名称匹配相隔离,而参数列表则跟在方法名 称匹配后面。为了使参数匹配更灵活,我通过两种方式来设置它。如果所给的参数是圆括号 括起的列表,它们必须精确匹配方法参数。如果它们是使用方括号(“[] ”)来括起的,所列出的类型全都必须作为匹配方法的参数来提供,不过该方法可 以按任何顺序使用它们,并且还可以使用附加的参数。因此 *buildString(int, java.lang.String) 将匹配其名称以“buildString”结尾的任何方法,并且这些方法精确地 按顺序接受一个 int 类型和一个 String 类型的参数。 *buildString [int,java.lang.String] 将匹配具有相同名称的方法,但是这些方法接受两个 或更多的 参 数,其中一个是 int 类型,另一个是 java.lang.String 类型。 清单 6 给出了我编写来处理这些模式的 javassist.Translator 子类的简略版本。实际 的匹配代码与本文并不真正相关,不过如果您想要查看它或亲自使用它,我已将它包括在了 下载文件中。使用这个 TimingTranslator 的主程序类是 BatchTiming ,它也包括在下载文 件中。 清单 6. 模式匹配转换程序
后续内容 在上两篇文章中,您已经看到了如何使用 Javassist 来处理基本的转换。对于下一篇文 章,我们将探讨这个框架的高级特性,这些特性提供用于编辑字节代码的查找和替换技术。 这些特性使得对程序行为做出系统性的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |