`
bsr1983
  • 浏览: 1117609 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Groovy学习笔记四 Groovy与Java合作

    博客分类:
  • JVM
 
阅读更多
(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学习笔记 PDF版

    在《Groovy学习笔记》这本书中,你可能会学到如何快速入门Groovy,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...

    Groovy 学习笔记

    Groovy结合了Python、Ruby和Smalltalk等语言的特性,同时保留了与Java的无缝集成能力,使得它在编写脚本、构建工具、Web应用以及企业级应用程序开发中都有广泛的应用。 **一、Groovy基础** 1. **语法简洁**: ...

    Groovy学习笔记.pdf

    Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    groovy学习笔记

    以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...

    Groovy学习笔记 Struts2集成--Groovy类作为Action

    通过阅读文章《Groovy学习笔记 Struts2集成--Groovy类作为Action》,你可以更深入地了解如何在实际项目中利用Groovy的特性来优化Struts2应用。提供的压缩包文件`struts2-groovy-plugin`可能包含了Struts2 Groovy插件...

    Java JDK 7学习笔记 PDF

    这个PDF学习笔记是开发者深入理解JDK 7特性和功能的重要参考资料。以下是对Java JDK 7的一些核心知识点的详细阐述: 1. **泛型改进**:在JDK 7中,泛型的使用更加灵活,引入了类型推断(Type Inference)特性,通过...

    读书笔记:函数式编程 scala,java8,groovy 学习.zip

    读书笔记:函数式编程 scala,java8,groovy 学习

    Groovy语法&Gradle配置学习笔记

    1. **动态类型**:与Java不同,Groovy允许你在不指定类型的条件下编写代码,编译器会自动推断类型,提高了开发效率。 2. **简洁的语法**:Groovy使用了更少的括号和分号,比如函数调用和条件语句可以省略括号,使...

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    Groovy与Java高度互操作,可以在现有的Java项目中无缝集成。Groovy的优点在于它支持闭包和元编程,使得代码更加简洁和可扩展。 Stackless Python是一种Python的变体,它强调微线程(microthreads)的使用,提供更...

    Java JDK 7学习笔记 完整扫描版

    - 新的`invokedynamic`指令,为运行时绑定方法调用提供了支持,增强了Java与脚本语言的交互,比如Groovy和JavaScript。 10. **弃用和改进的API** - JDK 7中,一些过时的API被标记为废弃,如`FileInputStream`和`...

    JAVA JDK6 学习笔记

    **Java JDK6 学习笔记概述** Java JDK6(Java Development Kit 6)是Oracle公司发布的一个用于开发Java应用程序的重要工具集,包含了JRE(Java Runtime Environment)和一系列的开发和调试工具。这个版本的JDK发布...

    JAVA6.0学习笔记PDF版

    这份“JAVA6.0学习笔记PDF版”是由台湾著名Java培训师温信良编著的,他以其丰富的教学经验和深入的技术理解,为Java初学者和进阶者提供了一本详实的学习资料。 Java 6.0的主要更新和改进包括: 1. **改进的内存...

    Java JDK 7学习笔记

    这份"Java JDK 7学习笔记"PDF文档应该涵盖了这些关键特性和更多细节,包括如何使用和理解它们,以及在实际开发中如何应用。对于初学者和有经验的开发者来说,都是一个宝贵的参考资料。通过深入学习和实践,可以提升...

    JDK 6 java 学习笔记的代码

    8. **Scripting API**:JDK 6引入了ScriptEngine接口,允许Java应用程序直接执行脚本语言代码,如JavaScript、Groovy等,增强了Java的动态语言支持。 9. **改进的异常处理**:JDK 6允许在catch子句中捕获多个异常...

    Java+JDK+6学习笔记

    本学习笔记将深入探讨Java JDK 6中的关键知识点,帮助初学者和有经验的开发者更好地理解和应用这个版本的Java。 一、Java基础 Java是一种面向对象的编程语言,其特点包括跨平台性、垃圾回收机制和自动内存管理。在...

    良葛格java jdk 5.0学习笔记

    《良葛格java jdk 5.0学习笔记》是一份专为初学者设计的Java编程教程,旨在帮助读者深入理解和掌握Java JDK 5.0版本的关键特性与技术。这份笔记包含了丰富的章节内容,覆盖了从基础到进阶的各个层面,通过详细讲解和...

    良葛格java jdk 6.0学习笔记代码.rar

    "良葛格"的Java JDK 6.0学习笔记旨在帮助初学者和有经验的程序员深入理解这一版本的Java语言特性,以及如何利用JDK 6.0进行开发。 一、JDK 6.0主要特性 1. **自动内存管理**:Java 6引入了更高效的垃圾回收机制,...

Global site tag (gtag.js) - Google Analytics