快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
的实例数组的形式 将形参定义提供给这个库,而实际的定义则可以使用匹配每种形参类型的子类。对于业务计 划生成器的例子,这可以采用清单2中所示的形式:

清单 2. 业务计划生成器的形参定义

private static final ParameterDef[] PARM_DEFS = {    new BoolDef(''c'', "m_isConcise"),    new IntDef(''f'', "m_initialRevenue", 10, 10000),    new FloatDef(''g'', "m_growthRate", 1.0, 100.0),    new StringDef(''n'', "m_productDescription") }

Java编程的动态性,第3部分: 应用反射(3)

时间:2011-04-09 IBM Dennis M. Sosnoski

有了得到允许的在一个数组中定义的形参,应用程序对参数处理代码的调用就可以像对一 个静态方法的单个调用一样简单。为了允许除形参数组中定义的实参之外额外的实参(要么 是必需的值,要么是可变长度的值),我将令这个调用返回被处理实参的实际数量。这样应 用程序便可以检查额外的实参并适当地使用它们。最后的结果看上去如清单3所示:

清单 3. 使用库

public class PlanGen {    private static final ParameterDef[] PARM_DEFS = {      ...    };    public static void main(String[] args) {      // if no arguments are supplied, assume help is needed      if (args.length > 0) {        // process arguments directly to instance        PlanGen inst = new PlanGen();        int next = ArgumentProcessor.processArgs          (args, PARM_DEFS, inst);        // next unused argument is output file name        if (next >= args.length) {          System.err.println("Missing required output file  name");          System.exit(1);        }        File outf = new File(args[next++]);        ...      } else {        System.out.println("\nUsage: java PlanGen " +        "[-options] file\nOptions are:\n c concise plan\n" +        "f first year revenue (K$)\n g growth rate\n" +        "n product description");      }    } }

最后剩下的部分就是处理错误报告(例如一个未知的形参标记字符或者一个超出范围的数 字值)。出于这个目的,我将定义 ArgumentErrorException 作为一个未经检查的异常,如 果出现了某个这一类的错误,就将抛出这个异常。如果这个异常没有被捕捉到,它将立即关 闭应用程序,并将一条错误消息和栈跟踪输出到控制台。一个替代的方法是,您也可以在代 码中直接捕捉这个异常,并且用其他方式处理异常(例如,可能会与使用信息一起输出真正 的错误消息)。

实现库

为了让这个库像计划的那样使用反射,它需要查找由形参定义数组指定的一些字段,然后 将适当的值存到这些来自相应的命令行参数的字段中。这项任务可以通过只查找实际的命令 行参数所需的字段信息来处理,但是我反而选择将查找和使用分开。我将预先找到所有的字 段,然后只使用在参数处理期间已经被找到的信息。

预先找到所有的字段是一种防错性编程的步骤,这样做可以消除使用反射时带来的一个潜 在的问题。如果我只是查找需要的字段,那么就很容易破坏一个形参定义(例如,输错相应 的字段名),而且还不能认识到有错误发生。这里不会有编译时错误,因为字段名是作为 String 传递的,

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