Java 编程的动态性,第3部分: 应用反射
2010-03-18 00:00:00 来源:WEB开发网一开始只有一个或者两个参数,按照某种特定的顺序排列。
考虑到这个应用程序有更多的事情要做,于是添加更多的参数。
厌倦了每次都输入所有的参数,于是让一些参数成为可选的参数,让这些参数带有默认的值。
忘记了参数的顺序,于是修改代码,允许参数以任何顺序排列。
将这个应用程序交给其他感兴趣的人。但是他们并不知道这些参数各自代表什么,于是又为这些参数添加更完善的错误检查和“帮助”描述。
当我进入到第5步的时候,我通常会后悔没有将整个过程都放在第一步来做。好在我很快就会忘记后面的那些阶段,不到一两个星期,我又会考虑另外一个简单的小命令行程序,我想拥有这个应用程序。有了这个想法之后,上述整个恶心的循环过程的重现只是时间的问题。
有一些库可以用来帮助进行命令行参数处理。不过,在本文中我会忽略掉这些库,而是自己动手创建一个库。这不是(或者不仅仅是)因为我有着“非此处发明(not invented here)”的态度(即不愿意用外人发明的东西,译者注),而是因为想拿参数处理作为一个实例。这样一来,反射的强项和弱点便正好体现了对参数处理库的需求。特别地,参数处理库:
需要一个灵活的接口,用以支持各种应用程序。
对于每个应用程序,都必须易于配置。
不要求顶级的性能,因为参数只需处理一次。
不存在访问安全性问题,因为命令行应用程序运行的时候通常不带安全管理器。
这个库中实际的反射代码只代表整个实现的一小部分,因此我将主要关注与反射最相关的一些方面。
草拟出一份设计
应用程序访问参数数据最方便的方式或许是通过该应用程序的 main 对象的一些字段。例如,假设您正在编写一个用于生成业务计划的应用程序。您可能想使用一个 boolean 标记来控制业务计划是简要的还是冗长的,使用一个 int 作为第一年的收入,使用一个 String 作为对产品的描述。我将把这些会影响应用程序的运行的变量称作 形参(parameters),以便与命令行提供的 实参(arguments)――即形参的值区分开来。通过为这些形参使用字段,将使得在需要形参的应用程序代码中的任何地方都可以方便地调用它们。而且,如果使用字段的话,在定义形参字段时为任意形参设置默认值也很方便,如清单1所示:
更多精彩
赞助商链接