groovy 在Java项目上使用Groovy

示例

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来检索文件的整个文本。这在脚本中非常有用。