Groovy让JAVA更美好
Groovy 作为一种基于JVM 的敏捷开发语言, 在很多领域已经名声鹊起, 对于很多有经验的程序员来说都不会陌生。今天在这里把Groovy的一些基础和有趣之处介绍给大家。
首先,Groovy的诞生告诉了大家,JVM上并不是只能跑JAVA一种语言编写的东西,因为Groovy做到了,并且Groovy能和JAVA很好地结合使用,包括与Spring的集成,创造出1+1〉2的效应。
然后,接触过Groovy的人就会发现,由于能直接使用JAVA的类库,使得Groovy的使用变得极其简单,并且在学习了Groovy的语法以后,很多人会被那些极简而又朴素优美的语法和代码语句完全吸引住。
Groovy既是一种面向对象的语言,又可以纯粹作为脚本语言,因此在Groovy的语法上,能看到很多Ruby以及Python的影子,这点弥补了JAVA在这方面的劣势。而作为有JAVA基础的程序员,Groovy的学习成本几乎为零。
Groovy标志性的特点就是动态,以及其简便强大的闭包,还有对文件处理的精简。
众所周知,JAVA在定义变量的时候就必须决定它的类型,而作为动态语言的Groovy,在为变量赋值的时候,才决定这个对象的类型,动态的好处就是灵活。当然这只是Groovy的冰山一角,很多时候,Groovy还作为对JAVA在脚本语言方面的补充而被使用。
有时候,当我们需要把一些含有编译期不可知、只有在运行期才能获得参数的公式、规则在编译期进行处理的时候,我们就会发现我们需要依赖脚本语言,当然我们也可以让JAVA直接去跑JAVA Script,但是当你看到Groovy强大的语法的时候,你就会明白你有更好的选择。
我们来看一个例子
class Human{ void help(){ println("human help") }}class Animal{ void help(){ println("animal help") }}def takeHelp(helper){ helper.help()}//Human a = new Human()//a.help()takeHelp(new Human())takeHelp(new Animal())def closureTst = { para1,para2,closure -> println("hello! $para2 & $para1"); closure.call();}Closure clo1 = closureTst(1,2,{println("hello")});String str ='''Hello World!'''println(str);
package cn.newtouch.rdc.test.groovy;import groovy.lang.GroovyShell;import java.io.File;public class GroovyTest {public static void main(String args[]) throws Exception{ ClassLoader parent = GroovyTest.class.getClassLoader(); File file = new File("EmailGroovy.groovy"); GroovyShell gs = new GroovyShell(parent); Object r = gs.evaluate(file); System.out.println(r); }} ClassLoader parent = GroovyTest.class.getClassLoader(); GroovyClassLoader loader = new GroovyClassLoader(parent); Class<?> groovyClass = loader.parseClass(file); GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();groovyObject.invokeMethod();
def emails = new XmlParser().parse("emails.xml");emails.email.each{ println"${it.@id} ${it.subject.text()}"; }这段代码是用来解析一个XML的,emails.xml这个XMl的内容为