|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。
Groovy元编程为您供应罕见成绩的复杂办理计划
Java下一代言语扩大现有的类和其他构件的办法有良多,前两期Java下一代文章切磋了个中的一些办法。在本期文章中,我将持续该探究,细心检察在多种高低文中完成扩大的Groovy元编程手艺。
在“没有承继性的扩大,第1部分”中,在会商利用种别类和ExpandoMetaClass作为将新举动“使用于”现有类的机制时,我偶尔打仗了一些Groovy元编程特征。Groovy中的元编程特征更深切一些:它们使得集成Java代码变得更简单,并且能够匡助您接纳比Java言语更简便的体例来实行罕见义务。
接口强迫转换(Interfacecoercion)
接口是Java言语中罕见的语义重用机制。实验以简便的体例集成Java代码的其他言语应当供应复杂的办法来详细化接口。在Groovy中,类能够经由过程传统的Java体例来扩大接口。可是,Groovy还使得在便利时轻松地将闭包和映照强迫转换成接话柄例变得很简单。
单一办法强迫转换
清单1中的Java代码示例利用FilenameFilter接口来定位文件:
清单1.在Java中利用FilenameFilter接口列出文件- importjava.io.File;
- importjava.io.FilenameFilter;
- publicclassListDirectories{
- publicString[]listDirectoryNames(Stringroot){
- returnnewFile(root).list(newFilenameFilter(){
- @Override
- publicbooleanaccept(Filedir,Stringname){
- returnnewFile(name).isDirectory();
- }
- });
- }
- }
复制代码 在清单1中,我创立了一个新的匿名外部类,它掩盖了指定过滤前提的accept()办法。在Groovy中,我能够跳过创立一个新类的步骤,只将一个闭包强迫转换成接口,如清单2所示:
清单2.在Groovy中经由过程利用闭包强迫转换来摹拟FilenameFilter接口- newFile(.).list(
- {Filedir,Stringname->newFile(name).isDirectory()}
- asFilenameFilter).each{printlnit}
复制代码 在清单2中,list()办法想利用一个FilenameFilter实例作为参数。但我却创立了一个与接口的accept()署名相婚配的闭包,并在闭包的注释中完成接口的功效。在界说了闭包以后,我经由过程挪用asFilenameFilter将闭包强迫转换成得当的FilenameFilter实例。Groovy的as运算符将闭包详细化为一个完成接口的类。该手艺关于单一办法接口十分合用,由于办法和闭包之间存在一个天然映照。
关于指定多个办法的接口,被详细化的类为每一个办法都挪用了不异的闭包块。但只在少少数情形下,用不异代码来处置一切办法挪用才是公道的。当您必要利用多个办法时,可使用包括办法称号/闭包对的Map,而不是利用单一的闭包。
映照
在Groovy中,还可使用映照来暗示接口。映照的键是代表办法称号的字符串,键值是完成办法举动的代码块。清单3中的示例将一个映照详细化为一个Iterator实例:
清单3.在Groovy中利用映照来详细化接口- h=[hasNext:{h.i>0},next:{h.i--}]
- h.i=10
- defiterator=hasIterator
- while(iterator.hasNext())
- printiterator.next()+","
- //10,9,8,7,6,5,4,3,2,1,
复制代码 在清单3中,我创立了一个映照(h),它包含hasNext和next键,和它们各自的代码块。Groovy假定映照键是字符串,以是我不必要用引号来包抄该键。在每一个代码块中,我用点标记(h.i)援用h映照的第三个键(i)。这个点标记自创自人们所熟习的对象语法,它是Groovy中的另外一个语法糖示例。在利用h作为一个迭代器之前,不会实行代码块,我必需起首确保i有一个值,然后再利用h作为一个迭代器。我用h.i=10设置i的值。然后,我将h选作一个Iterator,并利用从10入手下手的整数汇合。
经由过程使得映照可以静态地作为接话柄例,Groovy极年夜地削减了Java言语偶然招致的一些语法成绩。此特征很好地申明了Java下一代言语怎样改善开辟职员的体验。
ExpandoMetaClass
正如我在"没有承继性的扩大,第1部分"中所述,您可使用ExpandoMetaClass将新办法增加到类—包含中心类,好比Object和String。ExpandoMetaClass关于其他一些用处也是有效的,好比将办法增加到对象实例,和改良非常处置。
<p>
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。 |
|