(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
解压,将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:002)从Java调用Groovy
从java程序调用Groovy需要把Groovy及其相关的JAR放到这个程序的CLASSPATH下,因为它们都是运行时的依赖项。
可以直接把groovy安装目录/embeddable/groovy-all-2.4.0-rc-1.jar放到java项目的CLASSPATH中。
下面是几种从Java调用Groovy代码的办法
- 使用Bean Scripting Framework(BSF),即JSR223;
- 使用GroovyShell;
- 使用GroovyClassLoader;
- 使用GroovyScriptEngine;
- 使用嵌入式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.02)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=1733)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,理解其基本语法,包括变量、控制流、类和对象的创建,以及如何利用Groovy的特性来提高开发效率。此外,书中可能还会涵盖Groovy在实际项目中的应用,...
Groovy结合了Python、Ruby和Smalltalk等语言的特性,同时保留了与Java的无缝集成能力,使得它在编写脚本、构建工具、Web应用以及企业级应用程序开发中都有广泛的应用。 **一、Groovy基础** 1. **语法简洁**: ...
Groovy是一种动态、灵活的编程语言,它是Java平台上的一个主要补充,特别是在脚本编写和快速原型设计方面表现突出。...这份"Groovy学习笔记.pdf"应该会提供一个良好的起点,帮助你踏上Groovy的学习之旅。
### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...
以下是对Groovy学习笔记各章节的详细解释: ### 第1章:数字和字符串 在Groovy中,所有的数字都是Object类型的,这意味着你可以在对象上调用方法。例如,你可以直接在数字上使用加减乘除等运算符,如`12 + 8`。...
通过阅读文章《Groovy学习笔记 Struts2集成--Groovy类作为Action》,你可以更深入地了解如何在实际项目中利用Groovy的特性来优化Struts2应用。提供的压缩包文件`struts2-groovy-plugin`可能包含了Struts2 Groovy插件...
这个PDF学习笔记是开发者深入理解JDK 7特性和功能的重要参考资料。以下是对Java JDK 7的一些核心知识点的详细阐述: 1. **泛型改进**:在JDK 7中,泛型的使用更加灵活,引入了类型推断(Type Inference)特性,通过...
读书笔记:函数式编程 scala,java8,groovy 学习
1. **动态类型**:与Java不同,Groovy允许你在不指定类型的条件下编写代码,编译器会自动推断类型,提高了开发效率。 2. **简洁的语法**:Groovy使用了更少的括号和分号,比如函数调用和条件语句可以省略括号,使...
Groovy与Java高度互操作,可以在现有的Java项目中无缝集成。Groovy的优点在于它支持闭包和元编程,使得代码更加简洁和可扩展。 Stackless Python是一种Python的变体,它强调微线程(microthreads)的使用,提供更...
- 新的`invokedynamic`指令,为运行时绑定方法调用提供了支持,增强了Java与脚本语言的交互,比如Groovy和JavaScript。 10. **弃用和改进的API** - JDK 7中,一些过时的API被标记为废弃,如`FileInputStream`和`...
**Java JDK6 学习笔记概述** Java JDK6(Java Development Kit 6)是Oracle公司发布的一个用于开发Java应用程序的重要工具集,包含了JRE(Java Runtime Environment)和一系列的开发和调试工具。这个版本的JDK发布...
这份“JAVA6.0学习笔记PDF版”是由台湾著名Java培训师温信良编著的,他以其丰富的教学经验和深入的技术理解,为Java初学者和进阶者提供了一本详实的学习资料。 Java 6.0的主要更新和改进包括: 1. **改进的内存...
这份"Java JDK 7学习笔记"PDF文档应该涵盖了这些关键特性和更多细节,包括如何使用和理解它们,以及在实际开发中如何应用。对于初学者和有经验的开发者来说,都是一个宝贵的参考资料。通过深入学习和实践,可以提升...
8. **Scripting API**:JDK 6引入了ScriptEngine接口,允许Java应用程序直接执行脚本语言代码,如JavaScript、Groovy等,增强了Java的动态语言支持。 9. **改进的异常处理**:JDK 6允许在catch子句中捕获多个异常...
本学习笔记将深入探讨Java JDK 6中的关键知识点,帮助初学者和有经验的开发者更好地理解和应用这个版本的Java。 一、Java基础 Java是一种面向对象的编程语言,其特点包括跨平台性、垃圾回收机制和自动内存管理。在...
《良葛格java jdk 5.0学习笔记》是一份专为初学者设计的Java编程教程,旨在帮助读者深入理解和掌握Java JDK 5.0版本的关键特性与技术。这份笔记包含了丰富的章节内容,覆盖了从基础到进阶的各个层面,通过详细讲解和...
"良葛格"的Java JDK 6.0学习笔记旨在帮助初学者和有经验的程序员深入理解这一版本的Java语言特性,以及如何利用JDK 6.0进行开发。 一、JDK 6.0主要特性 1. **自动内存管理**:Java 6引入了更高效的垃圾回收机制,...