您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > GROOVY_快速入门
Groovy快速入门1、集合(1)List(java.util.List)list=[1,2,'hello',newjava.util.Date()]assertlist.size()==4assertlist.get(2)=='hello'注意:一切都是对象(数字会自动转换)(2)Map(java.util.Map)map=['name':'James','location':'London']assertmap.size()==2assertmap.get('name')=='James'(3)遍历集合list=[1,2,3]for(iinlist){printlni}2、闭包(Closures)闭包类似Java的内类,区别是闭包只有单一的方法可以调用,但可以有任意的参数closure={param|println(hello${param})}closure.call(world!)closure={greeting,name|println(greeting+name)}closure.call(hello,world!)闭包用“{}”括起,“|”前面是参数,后面是处理语句,使用call调用这里我们使用了一个Groovy-Beta3闭包定义,只是为了让您能看懂老版本Groovy的一些例子。在新的GroovyJSR中对闭包的定义略有改动,因为|字符同时也是Java中的位操作符;GroovyJSR建议使用Nice(另外一种JRE语言)样式的-分隔符代替它。第一个例子演示了在字符串内使用参数的形式:${param}第二个例子演示了多参数形式:用“,”分隔参数如果只有一个参数,可以不写,而使用缺省的参数“it”,如下面的例子:closure={printlnhello+it}closure.call(world!)3、each遍历集合,逐个传递给闭包[1,2,3].each{item|print${item}-}上面例子的输出结果是:1-2-3-4、collect遍历集合,逐个传递给闭包,处理后的结果返回给对应的项value=[1,2,3].collect{it*2}assertvalue==[2,4,6]5、find根据闭包断言,返回集合中找到的第一个项目value=[1,2,3].find{it1}assertvalue==26、findAll根据闭包断言,返回集合中所有找到的项目value=[1,2,3].findAll{it1}assertvalue==[2,3]7、inject遍历集合,第一次将传递的值和集合项目传给闭包,将处理结果作为传递的值,和下一个集合项目传给闭包,依此类推value=[1,2,3].inject('counting:'){str,item|str+item}assertvalue==counting:123value=[1,2,3].inject(0){count,item|count+item}assertvalue==68、every如果集合中所有项目都匹配闭包断言,就返回true,否则返回falsevalue=[1,2,3].every{it5}assertvaluevalue=[1,2,3].every{item|item3}assert!value9、any如果集合中任何项目匹配闭包断言,就返回true,否则返回falsevalue=[1,2,3].any{it2}assertvaluevalue=[1,2,3].any{item|item3}assertvalue==false10、min/max返回集合中的最小/最大项目(对象必须可比较)value=[9,4,2,10,5].max()assertvalue==10value=[9,4,2,10,5].min()assertvalue==2value=['x','y','a','z'].min()assertvalue=='a'11、join连接集合中的值成一个字符串value=[1,2,3].join('-')assertvalue=='1-2-3'12、yield在Python和Ruby中通过yield语句创建“yield”风格的iterators,在Groovy同样有效,只是使用的是闭包classFoo{staticvoidmain(args){foo=newFoo()for(xinfoo.myGenerator){print(${x}-)}}myGenerator(Closureyield){yield.call(A)yield.call(B)yield.call(C)}}例子的输出结果是:A-B-C-Cloures原型可以省略,call和括号同样可选,这样更象Python/RubyclassFoo{myGenerator(yield){yieldAyieldByieldC}staticvoidmain(args){foo=newFoo()foo.myGenerator{printlnCalledwith${it}}}}Groovy全攻略--嵌入篇Groovy被设计得非常轻量级,很容易迁入到任何Java应用系统。你可以使用BSF将Groovy脚本嵌入任何Java代码中.但是Groovy提供了一个轻量级的紧密集成.下面是3种主要方法:1.使用Shell调试脚本或表达式在Groovy中你可以使用GroovyShell对Groovy脚本和表达式进行调试.GroovyShell允许你通过Binding对象传入或传出变量.//从Java代码中调用Groovy语句Bindingbinding=newBinding();binding.setVariable(foo,newInteger(2));GroovyShellshell=newGroovyShell(binding);Objectvalue=shell.evaluate(println'HelloWorld!';x=123;returnfoo*10);assertvalue.equals(newInteger(20));assertbinding.getVariable(x).equals(newInteger(123));2.在Java中动态调用运行Groovy代码你可以使用GroovyClassLoader将Groovy的类动态地载入到Java程序中并直接使用或运行它.下面是一个例子:ClassLoaderparent=getClass().getClassLoader();GroovyClassLoaderloader=newGroovyClassLoader(parent);ClassgroovyClass=loader.parseClass(newFile(src/test/groovy/script/HelloWorld.groovy));//调用实例中的某个方法GroovyObjectgroovyObject=(GroovyObject)groovyClass.newInstance();Object[]args={};groovyObject.invokeMethod(run,args);如果你想使用一个用Groovy脚本实现的接口,你可以这么使用它:GroovyClassLoadergcl=newGroovyClassLoader();Classclazz=gcl.parseClass(myStringwithGroovyClassSourceSomeName.groovy);ObjectaScript=clazz.newInstance();MyInterfacemyObject=(MyInterface)aScript;myObject.interfaceMethod();如果某个Groovy类实现口MyInterface接口,那么上面的代码就会很好的工作.myObject的使用方法与其他实现了MyInterface接口的Java对象一样.3.Groovy脚本引擎对于那些想将Groovy脚本嵌入到服务器并且在每次修改后重新装入的人来说,Groovy脚本引擎提供了一个彻底的解决方案.你可以设定系列CLASSPATH作为根来初始化Groovy脚本引擎,这些GLASSPATH可以是URL也可以是目录名.接着你就可以这些根路径下的任何Groovy脚本了.GSE会跟踪脚本间的依赖关系,因此如果任何有依赖关系的脚本被修改,整颗树将会重新编译和载入.另外,每次执行脚本时,你都可以传入一个包含脚本可接受属性的Binding.脚本执行完以后,传入脚本中的那些属性在Binding中依然有效.下面是一个例子:/my/groovy/script/path/hello.groovy:output=Hello,${input}!importgroovy.lang.Binding;importgroovy.util.GroovyScriptEngine;String[]roots=newString[]{/my/groovy/script/path};GroovyScriptEnginegse=newGroovyScriptEngine(roots);Bindingbinding=newBinding();binding.setVariable(input,world);gse.run(test.groovy,binding);System.out.println(binding.getVariable(output));将打印Hello,world!.4.运行时依赖和JDK1.4一样,GroovyJar也依赖与ASM库上的运行时,ASM库包括4个Jar(asm-2.1.jar,asm-util-2.1.jar,asm-attrs-2.1.jarandasm-analysis-2.1).也就是说,只要将上面的5个Jar添加到路径中,你就能将轻松地Groovy嵌入到你的应用里.另一种方案可以不用那么多的Jar.你可以用GROOVY_HOME/embeddable目录下的groovy-all-1.0-beta-x.jar.这个Jar包将Groovy和ASM组合打包成一个方便的Jar包.注意:groovy-all-1.0-beta-x.jar中的ASM类使用了不同的命名空间,因此要避免与使用ASM的库发生冲突.Groovy全攻略--运行篇Groovy脚本是一个包含许多语句和类声明的文本文件.Groovy的用法和其他脚本语言类似.下面是几种运行Groovy脚本的方法:1.使用交互控制台Groovy有一个Swing交互控制台,允许你像使用SQL工具一样输入和执行Groovy语句.控制台支持历史记录,因此你可以向前或向后遍历命令.如果你已经安装了Groovy二进制分发包,你可以使用下面的命令启动GroovySwing控制台.如果像启动命令行控制台,可以输入下面的命令:GroovyConsole如果想启动命令行控制台,可以输入下面的命令Groovysh从源代码分发包中启动SwingGroovy控制台mavenconsole2.通过IDE运行Groovy脚本有一个叫做GroovyShell的类含有main(String[])方法可以运行任何Groovy脚本.你可以用下面的语句执行任何Groovy脚本:javagroovy.lang.GroovyShellfoo/MyScript.groovy[arguments你可以在你的IDE中使用上面的Groovymain()执行或调试任何Groovy脚本.3.用命令行执行Groovy脚本在GROOVY_HOME\bin里有个叫'groovy'或'groovy.bat'的脚本文件(或者二者都有,根据你的平台不同而不同).这些脚本文件是Groovy运行时的一部分.一旦安装了Groovy运行时,你就可以这样运行Groovy脚本:groovyfoo/MyScript.groovy[arguments]如果你使用从CVS构建的Groovy
本文标题:GROOVY_快速入门
链接地址:https://www.777doc.com/doc-6315645 .html