当前位置:首页 > 开发 > 编程语言 > Java > 正文

Groovy学习笔记四 Groovy与Java合作

发表于: 2015-01-05   作者:bsr1983   来源:转载   浏览次数:
摘要: (1)从Groovy调用Java 从Groovy调用Java很简单,只要把JAR放到CLASSPATH中,然后用标准的import语句就行了。 以joda-time为例,下载joda-time,地址: https://github.com/JodaOrg/joda-time/releases/download/v2.6/joda-time-2.6-dist.tar.gz 解压,将jo
(1)从Groovy调用Java
从Groovy调用Java很简单,只要把JAR放到CLASSPATH中,然后用标准的import语句就行了。
解压,将joda-time-2.6.jar放到Groovy安装目录/lib下
示例代码:
import org.joda.time.*;
DateTime dateTime=new DateTime();
int month=dateTime.getMonthOfYear();
println month
println dateTime.toString()
输出

1
2015-01-05T19:16:07.107+08:00
  2)从Java调用Groovy
从java程序调用Groovy需要把Groovy及其相关的JAR放到这个程序的CLASSPATH下,因为它们都是运行时的依赖项。
可以直接把groovy安装目录/embeddable/groovy-all-2.4.0-rc-1.jar放到java项目的CLASSPATH中。
下面是几种从Java调用Groovy代码的办法
  1. 使用Bean Scripting Framework(BSF),即JSR223;
  2. 使用GroovyShell;
  3. 使用GroovyClassLoader;
  4. 使用GroovyScriptEngine;
  5. 使用嵌入式Groovy控制台。
1)GroovyShell
在临时性快速调用Groovy并计算表达式或类似于脚本的代码时,可以用GroovyShell。
import groovy.lang.Binding;
import groovy.lang.GroovyShell;

/**
 * Created with IntelliJ IDEA.
 * User: billlee
 * Date: 2015/1/5
 * Time: 19:28
 * To change this template use File | Settings | File Templates.
 */
public class GroovyShellDemo {
    public static void main(String[] args) {
        Binding binding=new Binding();
        binding.setVariable("x",3);
        binding.setVariable("y",0.2);
        GroovyShell groovyShell=new GroovyShell(binding);
        Object value=groovyShell.evaluate("x+y");
        System.out.println("x+y="+value.toString());
        value=groovyShell.evaluate("x-y");
        System.out.println("x-y="+value.toString());
        value=groovyShell.evaluate("x*y");
        System.out.println("x*y="+value.toString());
        value=groovyShell.evaluate("x/y");
        System.out.println("x/y="+value.toString());
    }
}
输出:
x+y=3.2
x-y=2.8
x*y=0.6000000000000001
x/y=15.0
  2)GroovyClassLoader
GroovyClassLoader的表现和Java的ClassLoader很像,找到类和想要调用的方法,然后调用就行了。
示例代码:
GetMaxValueOfList.groovy
/**
 * Created with IntelliJ IDEA.
 * User: billlee
 * Date: 2015/1/5
 * Time: 19:36
 * To change this template use File | Settings | File Templates.
 */
class GetMaxValueOfList {
    def Integer getMaxOfList(List list)
    {
        list.max()
    }
}
  GroovyClassLoaderDemo.java
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;

import java.io.File;
import java.util.ArrayList;

/**
 * Created with IntelliJ IDEA.
 * User: billlee
 * Date: 2015/1/5
 * Time: 19:38
 * To change this template use File | Settings | File Templates.
 */
public class GroovyClassLoaderDemo {
    public static void main(String[] args) {
        GroovyClassLoader loader=new GroovyClassLoader();
        try {
            Class<?> groovyClass=loader.parseClass(new File("GetMaxValueOfList.groovy"));
            GroovyObject groovyObject=(GroovyObject)groovyClass.newInstance();
            ArrayList<Integer> integers=new ArrayList<>();
            integers.add(1);
            integers.add(122);
            integers.add(145);
            integers.add(173);
            Object[] arguments={integers};
            Object maxValue=groovyObject.invokeMethod("getMaxOfList",arguments);
            System.out.println("maxValue="+maxValue.toString());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Exception e="+e.toString());
        }
    }
}

输出为:
maxValue=173
  3)GroovyScriptEngine
使用 GroovyScriptEngine要指明Groovy代码的URL或所在目录。Groovy脚本引擎会加载那些脚本,并在必要时进行编译,包括其中的依赖脚本。
hello.groovy
def helloStatement="Hello Groovy ,Welcome ${name}"
GroovyScriptEngineDemo.java
import groovy.lang.Binding;
import groovy.util.GroovyScriptEngine;

/**
 * Created with IntelliJ IDEA.
 * User: billlee
 * Date: 2015/1/5
 * Time: 20:25
 * To change this template use File | Settings | File Templates.
 */
public class GroovyScriptEngineDemo {
    public static void main(String[] args) {
        try {
            String root[]=new String[]{"C:/groovy"};
            GroovyScriptEngine groovyScriptEngine=new GroovyScriptEngine(root);
            Binding binding=new Binding();
            binding.setVariable("name","billlee");
            Object object=groovyScriptEngine.run("hello.groovy",binding);
            System.out.println("output "+object.toString());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Exception e="+e.toString());
        }
    }
}
输出:
output Hello Groovy ,Welcome billlee
 

Groovy学习笔记四 Groovy与Java合作

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1.下载 下载地址为: http://groovy.codehaus.org/Download 我下载的是最新版本的Groovy 2.4.0-rc-1
1.下载 下载地址为: http://groovy.codehaus.org/Download 我下载的是最新版本的Groovy 2.4.0-rc-1
1.下载 下载地址为: http://groovy.codehaus.org/Download 我下载的是最新版本的Groovy 2.4.0-rc-1
1.下载 下载地址为: http://groovy.codehaus.org/Download 我下载的是最新版本的Groovy 2.4.0-rc-1
转自:http://www.ibm.com/developerworks/cn/education/java/j-groovy/ 关于本教程 如果现在有人要
Groovy 变身为 Java 前面已经看到 Groovy 与 Java 代码实际上可以互换的第一个证据。这一节将进一步
Groovy与Java的比较(上) 1.支持函数式编程,不需要main函数 2.默认导入常用的包,包括: java.io j
转载:http://www.blogjava.net/BlueSUN/archive/2007/03/03/101562.aspx Java帝国的王储——Groovy
Java帝国的王储——Groovy ! 让我们来回顾一下主流语言的发展历程:机器语言(由01组成) -> 汇编
什么是 Groovy? Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Jav
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号