快速业务通道

Java编程的动态性,第3部分: 应用反射 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
ring text) {     throw new ArgumentErrorException(text + " for argument ''" +      flag + "'' in argument " + m_currentIndex);    }    public static int processArgs(String[] args,      ParameterDef[] parms, Object target) {      ArgumentProcessor inst = new ArgumentProcessor(parms,  target);      ...    } }

最后,清单6显示了 int 形参值的形参定义子类的部分实现。这包括对基类的 bindToClass() 方法(来自 清单4)的重载,这个重载的方法首先调用基类的实现,然后检 查找到的字段是否匹配预期的类型。其他特定形参类型( boolean、float、String ,等等 )的子类与此十分相似。

清单 6. int 形参定义类

public class IntDef extends ParameterDef {    private int m_min;       // minimum allowed value    private int m_max;       // maximum allowed value    public IntDef(char chr, String name, int min, int max) {      super(chr, name);      m_min = min;      m_max = max;    }    protected void bindToClass(Class clas) {      super.bindToClass(clas);      Class type = m_field.getType();      if (type != Integer.class && type != Integer.TYPE)  {        throw new IllegalArgumentException("Field ''" + m_name +          "''in " + clas.getName() + " is not of type int");      }    }    public void handle(ArgumentProcessor proc) {      // set up for validating       boolean minus = false;      boolean digits = false;      int value = 0;      // convert number supplied in argument list to ''value''      ...      // make sure we have a valid value      value = minus ? -value : value;      if (!digits) {        proc.reportArgumentError(m_char, "Missing value");      } else if (value < m_min || value > m_max) {        proc.reportArgumentError(m_char, "Value out of range");      } else {        proc.setValue(new Integer(value), m_field);      }    } }

结束库

在本文中,我讲述了一个用于处理命令行参数的库的设计过程,作为反射的一个实际的例 子。这个库很好地阐明了如何有效地使用反射――它简化应用程序的代码,而且不用明显地 牺牲性能。牺牲了多少性能呢?从对我的开发系统的一些快速测试中可以看出,一个简单的 测试程序在使用整个库进行了参数处理时比起不带任何参数处理时运行起来平均只慢40毫秒 。多出来的这些时间大部分是花在库类和库代码所使用的其他类的装载上,因此,即使是对 于那些定义了许多命令行形参和许多实参值的应用程序,也不大可能会比这一结果糟很多。 对于我的命令行应用程序,额外的40毫秒根本不能引起我的注意。

它包括我在本文没有提到的一些特性,包括这样一些细节,比如钩子,用于容易地生成一 列格式化的形参标记,还有一些描述,有助于为应用程序提供使用指令。欢迎您在自己的程 序中使用这个库,并以任何您发现有用的方式扩展这个库。

现在我已讲过了 第1部分中Java类的基础,也讲过了 第2部分中的 Java Reflection API 的原理以及第3部分

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