Android Groovy 调用(十)

首先申明下,本文为笔者学习《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!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值