Groovy 快速入门

hoar 贡献于2012-04-07

作者 mudou  创建于2007-11-16 14:05:00   修改者mudou  修改于2007-11-18 15:24:00字数5579

文档摘要:Groovy快速入门
关键词:

Groovy快速入门     1、集合 (1)List (java.util.List) list = [1, 2, 'hello', new java.util.Date()] assert list.size() == 4 assert list.get(2) == 'hello' 注意:一切都是对象(数字会自动转换) (2)Map (java.util.Map) map = ['name':'James', 'location':'London'] assert map.size() == 2 assert map.get('name') == 'James' (3)遍历集合 list = [1, 2, 3] for (i in list) { println i }   2、闭包(Closures) l         闭包类似Java的内类,区别是闭包只有单一的方法可以调用,但可以有任意的参数 closure = { param | println("hello ${param}") } closure.call("world!") closure = { greeting, name | println(greeting + name) } closure.call("hello ", "world!") l 闭包用“{}”括起,“|”前面是参数,后面是处理语句,使用call调用 这里我们使用了一个 Groovy-Beta3 闭包定义,只是为了让您能看懂老版本Groovy的一些例子。在新的Groovy JSR中对闭包的定义略有改动,因为 | 字符同时也是 Java 中的位操作符;Groovy JSR 建议使用 Nice (另外一种JRE语言)样式的 -> 分隔符代替它。 l         第一个例子演示了在字符串内使用参数的形式:${param} l         第二个例子演示了多参数形式:用“,”分隔参数 l         如果只有一个参数,可以不写,而使用缺省的参数“it”,如下面的例子: closure = { println "hello " + it } closure.call("world!")   3、each l         遍历集合,逐个传递给闭包 [1, 2, 3].each { item | print "${item}-" } l         上面例子的输出结果是:1-2-3-   4、collect l         遍历集合,逐个传递给闭包,处理后的结果返回给对应的项 value = [1, 2, 3].collect { it * 2 } assert value == [2, 4, 6]   5、find l         根据闭包断言,返回集合中找到的第一个项目 value = [1, 2, 3].find { it > 1 } assert value == 2   6、findAll l         根据闭包断言,返回集合中所有找到的项目 value = [1, 2, 3].findAll { it > 1 } assert value == [2, 3]   7、inject l         遍历集合,第一次将传递的值和集合项目传给闭包,将处理结果作为传递的值,和下一个集合项目传给闭包,依此类推 value = [1, 2, 3].inject('counting: ') { str, item | str + item } assert value == "counting: 123" value = [1, 2, 3].inject(0) { count, item | count + item } assert value == 6   8、every l         如果集合中所有项目都匹配闭包断言,就返回true,否则返回false value = [1, 2, 3].every { it < 5 } assert value   value = [1, 2, 3].every { item | item < 3 } assert ! value   9、any l         如果集合中任何项目匹配闭包断言,就返回true,否则返回false value = [1, 2, 3].any { it > 2 } assert value value = [1, 2, 3].any { item | item > 3 } assert value == false   10、min/max l         返回集合中的最小/最大项目(对象必须可比较) value = [9, 4, 2, 10, 5].max() assert value == 10 value = [9, 4, 2, 10, 5].min() assert value == 2 value = ['x', 'y', 'a', 'z'].min() assert value == 'a'   11、join l         连接集合中的值成一个字符串 value = [1, 2, 3].join('-') assert value == '1-2-3'   12、 yield l         在Python和Ruby中通过yield语句创建“yield”风格的iterators,在Groovy同样有效,只是使用的是闭包 class Foo{ static void main(args) { foo = new Foo() for (x in foo.myGenerator) { print("${x}-") } } myGenerator(Closure yield) { yield.call("A") yield.call("B") yield.call("C") } } l         例子的输出结果是:A-B-C- l         Cloures原型可以省略,call和括号同样可选,这样更象Python/Ruby class Foo { myGenerator(yield) { yield "A" yield "B" yield "C" } static void main(args) { foo = new Foo() foo.myGenerator { println "Called with ${it}" } } } Groovy全攻略--嵌入篇 Groovy被设计得非常轻量级,很容易迁入到任何Java应用系统。 你可以使用BSF将Groovy脚本嵌入任何Java代码中.但是Groovy提供了一个轻量级的紧密集成.下面是3种主要方法: 1.使用Shell调试脚本或表达式 在Groovy中你可以使用GroovyShell对Groovy脚本和表达式进行调试.GroovyShell允许你通过Binding对象传入或传出变量. // 从Java代码中调用Groovy语句 Binding binding = new Binding(); binding.setVariable("foo", new Integer(2)); GroovyShell shell = new GroovyShell(binding); Object value = shell.evaluate("println 'Hello World!'; x = 123; return foo * 10"); assert value.equals(new Integer(20)); assert binding.getVariable("x").equals(new Integer(123)); 2.在Java中动态调用运行Groovy代码 你可以使用GroovyClassLoader将Groovy的类动态地载入到Java程序中并直接使用或运行它. 下面是一个例子: ClassLoader parent = getClass().getClassLoader(); GroovyClassLoader loader = new GroovyClassLoader(parent); Class groovyClass = loader.parseClass(new File("src/test/groovy/script/HelloWorld.groovy")); // 调用实例中的某个方法 GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance(); Object[] args = {}; groovyObject.invokeMethod("run", args); 如果你想使用一个用Groovy脚本实现的接口,你可以这么使用它: GroovyClassLoader gcl = new GroovyClassLoader(); Class clazz = gcl.parseClass(myStringwithGroovyClassSource "SomeName.groovy"); Object aScript = clazz.newInstance(); MyInterface myObject = (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}!" import  groovy.lang.Binding; import  groovy.util.GroovyScriptEngine; String[] roots  =   new  String[]  {  " /my/groovy/script/path "  } ; GroovyScriptEngine gse  =   new  GroovyScriptEngine(roots); Binding binding  =   new  Binding(); binding.setVariable( " input " ,  " world " ); gse.run( " test.groovy " , binding); System.out.println(binding.getVariable( " output " )); 将打印 "Hello, world!". 4.运行时依赖 和JDK1.4一样,Groovy Jar也依赖与ASM库上的运行时,ASM库包括4个Jar(asm-2.1.jar, asm-util-2.1.jar, asm-attrs-2.1.jar and asm-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二进制分发包,你可以使用下面的命令启动Groovy Swing控制台. 如果像启动命令行控制台,可以输入下面的命令: GroovyConsole 如果想启动命令行控制台,可以输入下面的命令 Groovysh 从源代码分发包中启动Swing Groovy控制台 maven console 2.通过IDE运行Groovy脚本 有一个叫做GroovyShell的类含有main(String[])方法可以运行任何Groovy脚本.你可以用下面的语句执行任何Groovy脚本: java groovy.lang.GroovyShell foo/MyScript.groovy [arguments 你可以在你的IDE中使用上面的Groovy main()执行或调试任何Groovy脚本. 3.用命令行执行Groovy脚本 在GROOVY_HOME\bin里有个叫'groovy' 或'groovy.bat' 的脚本文件(或者二者都有,根据你的平台不同而不同).这些脚本文件是Groovy运行时的一部分. 一旦安装了Groovy运行时,你就可以这样运行Groovy脚本: groovy foo/MyScript.groovy [arguments] 如果你使用从CVS构建的Groovy,那么除了Groovy脚本以外,命令行上可能还运行着其他的类. 1.拥有main()方法的类; 2.和JUnit的测试一起运行的继承自GroovyTestCase的类, 3.实现Runnable接口的类.run()方法被调用. 获得最新最强的Groovy,输入下面的命令做一个CVS检出 maven groovy:make-install 在groovy/target/install里会有一份完整的二进制分发包.你可以将groovy/target/install/bin添加到你的路径,这样你就可以轻松地用命令行执行你的Groovy脚本了. 4.用Groovy创建Unix脚本 你可以用Groovy编写Unix脚本并且像Unix脚本一样直接从命令行运行它.倘若你安装的是二进制分发包并且设置好了路径,那么下面的代码将会很好的工作: 将其保存为helloWorld.groovy. #!/usr/bin/env groovy println("Hello world") for (a in this.args) {   println("Argument: " + a) } 接着从命令行运行这个脚本, chmod +x helloWorld ./helloWorld

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 3 人已下载

下载文档