来看Java编程的静态性,第3部分: 使用反射
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发命令行参数处置是一项使人腻烦的琐屑事情,不论您已往已处置过量少次了,它仿佛总能从头摆在您的眼前。与其一遍又一各处编写统一块代码的分歧变种,为何倒霉用反射来简化参数处置的事情呢?Java参谋DennisSosnoski向您展现了怎样做到这一点。在本文中,Dennis长篇大论地先容了一个开源库,这个库可使得命令行参数实践上本人处置本人。
在上个月的文章中,我先容了JavaReflectionAPI,并扼要地报告了它的一些基础功效。我还细心研讨了反射的功能,而且在文章的最初给出了一些引导目标,告知读者在一个应用程序中什么时候应当利用反射,什么时候不该该利用反射。在本月这一期的文章中,我将经由过程检察一个使用程序来更深切地会商这一成绩,这个使用程序是用于命令行参数处置的一个库,它可以很好地表现反射的刚强和缺点。
一入手下手,在真正进进编写完成代码的事情之前,我将起首界说要办理的成绩,然后为这个库计划一个接口。不外,在开辟这个库的时分,我并非依照上述步骤举行的DD我先是尽力简化一群有大众代码基本的使用程序中的现有代码,然后使之通用化。本文中利用的“定义-计划-构建”这类线性序列比起完完全整地形貌开辟历程要简洁很多,并且,依照这类方式来构造对开辟历程的形貌,我能够修改我本来的一些假定,并清算失落这个库的代码中一些不用要的方面。您完整有但愿发明将上述体例作为开辟您本人的基于反射的使用程序时所使用的模子非常管用。
界说成绩
我已经写过很多利用命令行参数的Java使用程序。一入手下手,年夜多半使用程序都很小,但最后有些使用程序却变得年夜到出乎我的料想。上面是我察看到的这些使用程序的变年夜历程的标准形式:
一入手下手只要一个大概两个参数,依照某种特定的按次分列。
思索到这个使用程序有更多的事变要做,因而增加更多的参数。
厌倦了每次都输出一切的参数,因而让一些参数成为可选的参数,让这些参数带有默许的值。
健忘了参数的按次,因而修正代码,同意参数以任何按次分列。
将这个使用程序交给其他感乐趣的人。可是他们其实不晓得这些参数各自代表甚么,因而又为这些参数增加更完美的毛病反省和“匡助”形貌。
当我进进到第5步的时分,我一般会忏悔未将全部历程都放在第一步来做。幸亏我很快就会健忘前面的那些阶段,不到一两个礼拜,我又会思索别的一个复杂的小命令路程序,我想具有这个使用程序。有了这个设法以后,上述全部恶心的轮回历程的重现只是工夫的成绩。
有一些库能够用来匡助举行命令行参数处置。不外,在本文中我会疏忽失落这些库,而是自己下手创立一个库。这不是(大概不单单是)由于我有着“非此处创造(notinventedhere)”的立场(即不肯意用外人创造的工具,译者注),而是由于想拿参数处置作为一个实例。如许一来,反射的刚强和缺点便恰好表现了对参数处置库的需求。出格地,参数处置库:
必要一个天真的接口,用以撑持各类使用程序。
关于每一个使用程序,都必需易于设置。
不请求顶级的功能,由于参数只需处置一次。
不存在会见平安性成绩,由于命令行使用程序运转的时分一般不带平安办理器。
这个库中实践的反射代码只代表全部完成的一小部分,因而我将次要存眷与反射最相干的一些方面。
起草出一份计划
使用程序会见参数数据最便利的体例也许是经由过程该使用程序的main对象的一些字段。例如,假定您正在编写一个用于天生营业企图的使用程序。您大概想利用一个boolean标志来把持营业企图是扼要的仍是冗杂的,利用一个int作为第一年的支出,利用一个String作为对产物的形貌。我将把这些会影呼应用程序的运转的变量称作形参(parameters),以便与命令行供应的实参(arguments)DD即形参的值辨别开来。经由过程为这些形参利用字段,将使得在必要形参的使用程序代码中的任何中央都能够便利地挪用它们。并且,假如利用字段的话,在界说形参字段时为恣意形参设置默许值也很便利,如清单1所示:
清单1.营业企图天生器(部分清单)
public class PlanGen {
private boolean m_isConcise; // rarely used, default false
private int m_initialRevenue = 1000; // thousands, default is 1M
private float m_growthRate = 1.5; // default is 50% growth rate
private String m_productDescription = // McD look out, here I come
"eFood - (Really) Fast Food Online";
...
private int revenueForYear(int year) {
return (int)(m_initialRevenue * Math.pow(m_growthRate, year-1));
}
...
<p>
最后就是我对java的几点希望:首先是IDE工具,有人说java已经很好了,有jbuilder,eclipse,netBeans等等,但是我认为如果java想超越.net,那么他首先要解决的就是IDE工具的整合。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 是一种使用者不需花费很多时间学习的语言 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 是一种为 Internet发展的计算机语言
页:
[1]