首先申明下,本文为笔者学习《Groovy 程序设计》的笔记,并加入笔者自己的理解和归纳总结。
1. Groovy调用
1.1 调用Groovy脚本
groovy脚本文件hello.groovy
。
println "Hello World!" // Hello World!
输入groovy hello.groovy
可以调用该脚本。也可像java一样先进行编译,生产hello.class
文件。
groovyc hello.groovy
再使用java命令运行class文件。
java -classpath xxx/embeddable/groovy-all-2.4.7.jar:. hello
1.2 Groovy脚本调用脚本
script.groovy
文件
evaluate(new File("hello.groovy"))
返回
Hello World!
1.3 Groovy调用Groovy类
AGroovyClass.groovy
文件定义了一个类,在另外一个脚本中调用这个类。
class AGroovyClass {
def add(val1, val2) {
val1 + val2
}
}
useGroovyClass.groovy
文件
AGroovyClass obj = new AGroovyClass()
println obj.add(17, 31) // 48
如果两个文件在同一目录下,直接调用groovy useGroovyClass.groovy
。否则需要指定classpath
。
groovy -classpath lib useGroovyClass.groovy
1.4 Groovy调用Java类
AJavaClass.java
文件指定了一个Java类。
public class AJavaClass {
public void print() {
System.out.println("In AJavaClass print");
}
}
useJavaClass.groovy
文件
AJavaClass obj = new AJavaClass()
obj.print()
对AJavaClass.java
进行编译,再调用useJavaClass.groovy
文件。
javac AJavaClass.java
groovy useJavaClass.groovy
返回
In AJavaClass print
也可以进行联合编译,最后调用java命令
groovyc -j AJavaClass.java useJavaClass.groovy
java xxx/embeddable/groovy-all-2.4.7.jar:. useJavaClass
2. Java调用
2.1 Java调用Groovy类方法
AGroovyClass.groovy
文件
class AGroovyClass {
def add(val1, val2) {
val1 + val2
}
}
UseGroovyClass.java
文件
public class UseGroovyClass {
public static void main(String[] args) {
AGroovyClass groovyClass = new AGroovyClass();
Object result = groovyClass.add(13, 19);
System.out.println("result = " + result);
groovy.lang.GroovyObject instance = new AGroovyClass();
result = instance.invokeMethod("add", new Object[]{31, 17});
System.out.println("result = " + result);
result = instance.invokeMethod("add", new Object[]{"Hello ", "World!"});
System.out.println("result = " + result);
}
}
可以直接使用AGroovyClass
类,或借助GroovyObject
类来实现。
groovyc -j UseGroovyClass.java AGroovyClass.groovy
java -classpath xxx/embeddable/groovy-all-2.4.7.jar:. UseGroovyClass
返回
result = 32
result = 48
result = Hello World!
2.2 Java调用Groovy闭包
AGroovyClosure.groovy
文件
class AGroovyClosure {
def useClosure(closure) {
println "In AGroovyClosure useClosure"
closure()
}
def useClosureWithParameter(closure) {
println "In AGroovyClosure useClosureWithParameter"
closure(123)
}
}
UseGroovyClosure.java
文件,在java中实现闭包,在类中添加call()
方法。
public class UseGroovyClosure {
public static void main(String[] args) {
AGroovyClosure groovyClosure = new AGroovyClosure();
Object result = groovyClosure.useClosure(new Object(){
public String call() {
return "In UseGroovyClosure call";
}
});
System.out.println("result = " + result);
result = groovyClosure.useClosureWithParameter(new Object(){
public String call(int value) {
return "In UseGroovyClosure call " + value;
}
});
System.out.println("result = " + result);
}
}
编译后运行,返回
In AGroovyClosure useClosure
result = In UseGroovyClosure call
In AGroovyClosure useClosureWithParameter
result = In UseGroovyClosure call 123
2.3 Java调用Groovy命令
groovy脚本文件hello.groovy
。
println "Hello World!"
UseGroovyScript.java
文件,
import javax.script.*;
public class UseGroovyScript {
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("groovy");
System.out.println("Use Groovy Script from Java");
try {
engine.eval("println 'Hello from Groovy'");
engine.eval("evaluate new File('hello.groovy')");
} catch (ScriptException ex) {
System.out.println(ex);
}
}
}
需要使用到groovy-jsr223-2.4.7.jar
包
groovyc -j UseGroovyScript.java
java -classpath xxx/embeddable/groovy-all-2.4.7.jar:xxx/lib/groovy-jsr223-2.4.7.jar:. UseGroovyScript
返回
Use Groovy Script from Java
Hello from Groovy
Hello World!