Groovy可以访问所有Java类,实际上Groovy类是Java类,可以直接由JVM运行。如果您正在从事Java项目,那么使用Groovy作为一种简单的脚本语言来与Java代码进行交互就变得很容易了。
为了使事情变得更好,几乎所有Java类都可以重命名为.groovy并进行编译和运行,并且可以像原来一样正常工作,groovy几乎是Java的超级集,这是groovy的既定目标。
Groovy有一个REPL。 groovysh如果您的类路径设置正确,则Groovy附带了该类,可用于快速实例化和测试Java类。例如,如果您classpath指向eclipse的“ classes / bin”目录,则可以将文件保存在eclipse中,跳转groovysh并实例化该类以对其进行测试。
使用Groovy而不是仅使用Java的原因是:类加载器非常擅长在编译新类时使用它们。在开发过程中,通常不需要退出/重新启动groovysh。
语法为TERSE。这对于可维护的代码不是很好,但是对于脚本和测试,它可以极大地削减代码。它要做的一大事情是消除检查的异常(或更准确地说,将所有检查的异常转换为未检查的异常)。这将变成这样的代码(一秒钟后打个招呼):
class JavaClass { public static void main(String[] args) { try { Thread.sleep(1000); } catch(InterruptedException e) { // 您不应该留下一个空的catch块,但是谁在乎这是否被打断了??? } System.out.println("Hello!"); } }
进入Groovy的:
Thread.sleep(1000) print "Hello!"
Groovy还具有非常严格的初始化语法。这使您无需考虑数据即可随意指定数据:
在Java中初始化映射,您可能应该执行以下操作:
String[] init = { "1:Bill", "2:Doug", "3:Bev" }; // 请注意,其余的这些可以放在函数中并重用,或者可以在库中找到,但是我似乎总是不得不编写此函数! Map m = new HashMap<Integer, String>(); for(String pair : int) { String[] split = pair.split(":"); m.put(new Integer(split[0]), split[1]) }
这还不错,但是还有其他需要维护的地方。在常规中,您将只使用:
Map map = { 1 : "Bill", 2 : "Doug", 3 : "Bev" }
您完成了。列表语法同样简单。
另一个真正的大优势是groovy的闭包语法。它非常简洁有趣,维护起来有些困难,但是对于脚本来说,这并不是优先考虑的事情。例如,这是一些常规代码,用于在当前目录中查找所有.txt包含该单词Hello的文件:
println new File('.').files.findAll{ it.name.endsWith('.txt') && it.text.contains('Hello') }.collect{it.name}
本示例使用了一些“ Groovy”技巧:
.files指的是getFiles()方法-groovy可以随意在getter / setter和属性语法之间切换
it.指代迭代的当前元素。{ it }是的快捷方式{ it -> it },例如:
[1、2、3] .collect {它^ 2} == [1、4、9]
it.text(it文件在哪里)使用groovy添加的方法File来检索文件的整个文本。这在脚本中非常有用。