来看Java 下一代: 没有承继性的扩大(三)
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是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=
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前途未卜。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 是一种突破用户端机器环境和CPU 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
页:
[1]