|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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工具的整合。 |
|