java interface
package groovy;
public interface IFoo {
public Object run(Object foo, Object bar);
}
groovy implements
package groovy;
class Foo implements IFoo {
def x
public Object run(Object foo, Object bar) {
println 'Hello World!'
x = 123
println foo * 10
println bar
return 'success'
}
}
java call groovy
package groovy;
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
import java.io.File;
public class InvokeGroovy {
public static void main(String[] args) {
ClassLoader cl = new InvokeGroovy().getClass().getClassLoader();
GroovyClassLoader groovyCl = new GroovyClassLoader(cl);
try {
@SuppressWarnings("rawtypes")
Class groovyClass = groovyCl.parseClass(new File(InvokeGroovy.class.getResource("/groovy/Foo.groovy").toURI()));
IFoo foo = (IFoo) groovyClass.newInstance();
System.out.println(foo.run(new Integer(2), "More parameter..."));
System.out.println("=============================");
GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
System.out.println(groovyObject.invokeMethod("run", new Object[]{new Integer(2),"More parameter..."}));
} catch (Exception e) {
e.printStackTrace();
}
}
}
java execute groovy script
package groovy;
import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class TestEval {
public Object doit() {
ScriptEngineManager factory = new ScriptEngineManager(TestEval.class.getClassLoader());
ScriptEngine scriptEngine = factory.getEngineByName("groovy");//或者"Groovy" groovy版本要1.6以上的
try {
scriptEngine.put("test", "hello world!");
scriptEngine.put("outer", this);
scriptEngine.eval("println test; outer.java_out()");
} catch (ScriptException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Binding bb = new Binding();
bb.setVariable("test", "hello world!");
bb.setProperty("outer", this);
GroovyShell gs = new GroovyShell(bb);
return gs.evaluate("println test; outer.java_out()");
}
/**
* @param args
*/
public static void main(String[] args) {
TestEval te = new TestEval();
te.doit();
}
public void java_out(){
System.out.println("out from java");
}
}
分享到:
相关推荐
标题中的“Groovy和Java相互调用1”指的是在编程时如何在Groovy语言环境中调用Java类,以及反之,如何在Java程序中调用Groovy类。这是一种跨语言交互的方式,特别是在混合使用Groovy和Java的项目中非常常见。 ...
在Java和Groovy这两种语言中,互相调用代码是相当便捷的,因为它们可以无缝集成。Groovy是一种基于Java平台的脚本语言,它与Java有很高的互操作性,这使得开发者可以在同一个项目中混合使用Java和Groovy,充分利用...
SpringBoot、Gradle、Maven、Java和Groovy是Java生态系统中的重要组成部分,它们在现代软件开发中扮演着至关重要的角色。这篇详细的知识点解析将深入探讨这些技术及其相互关系。 1. **SpringBoot**: SpringBoot是...
- **代码互操作性**:Groovy和Java之间可以直接相互调用方法和构造器,这种无缝的互操作性为项目带来了极大的灵活性。 - **迁移路径**:对于希望逐步迁移到Groovy的项目,可以从引入简单的Groovy脚本开始,逐渐扩大...
本文将详细介绍如何在Android项目中实现Java与C的互相调用,并涉及CMakeLists.txt文件的配置。 首先,CMakeLists.txt是CMake构建工具的配置文件,用于管理C/C++项目。在Android Studio中,当涉及到原生代码时,我们...
在Android应用开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。JNI在Android系统中扮演着重要的角色,特别是在需要高效计算或者利用硬件特性时,如游戏开发、图像处理和...
为了推广学习groovy,低分提供给大家! 运行在Java虚拟机上,敏捷、动态的语言 建立在Java的基础上,同时,吸收了其他语言的优点,比如:... 与Java无缝集成,互相调用 与Java一样,一次编写,随处运行
8. **集成到Java项目中**:了解如何在现有的Java项目中引入Groovy,以及如何让Java和Groovy代码相互调用。 9. **iText库的使用**:学习iText库的基本用法,如创建PDF文档、添加文本、图像、表格,以及如何进行签名...
在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...
2. **基本使用**:导入必要的类并初始化`PinyinHelper`,然后调用`toHanyuPinyinStringArray()`方法进行转换。例如,转换汉字“你好”: ```java import net.sourceforge.pinyin4j.PinyinHelper; public class ...
- **多语言环境:** Vert.x 支持多种语言,包括 Java、Groovy、Ruby、Scala、JavaScript 等,这使得开发者可以根据项目需求选择最适合的语言进行开发。 **2.5 数据库集成** - **数据访问:** Vert.x 提供了对多种...
在Android开发中,调用Web服务是常见的任务之一,尤其是使用WebService进行数据交换。Web服务通常采用SOAP(Simple Object Access Protocol)或RESTful API的形式,其中SOAP常常涉及到对象的序列化和反序列化。对象...
总结起来,通过SoapUI,你可以直观地测试和调试Web服务,而通过JDK API,你可以将Web服务集成到Java应用程序中,实现自动化调用和更复杂的逻辑。两者结合使用,可以全面了解和管理Web服务的生命周期。
根据给定的信息,本文将对Java相关的架构图进行详细的解读与分析,主要涵盖Spring、Hibernate、Struts(包括Struts1和Struts2)、JSF、Seam、Grails、DWR、J2EE、Oracle等技术栈的核心概念及其架构特点。 ### 1. ...
本教程将详细介绍如何在Android中使用WebView,并实现JS与Java对象的相互调用。 一、WebView的基本使用 1. 添加依赖 首先,确保在`build.gradle`文件中添加了对WebView的支持库。在`dependencies`块中加入以下代码...
- **多项目 Java 构建**:讲解如何管理和构建多个相互依赖的 Java 项目。 - **依赖管理基础**: - **什么是依赖管理**:解释依赖管理的概念及其重要性。 - **声明依赖**:展示如何在构建脚本中声明依赖项。 - **...
JNI (Java Native Interface) 是Java平台的一个标准接口,它允许Java代码和其他语言写的代码进行交互。在本主题中,我们将深入探讨如何使用NDK进行编译以及通过JNI在Android与C/C++之间传递值。 首先,让我们理解...
**Gradle** 是一种基于 Java 的项目自动化构建工具,采用 Groovy 或 Kotlin DSL(领域特定语言)来编写构建脚本,支持增量编译和依赖管理,是目前 Java 项目中最流行的构建工具之一。 ##### 特点: - **灵活性**:...
3. **集成Java**:Groovy可以直接调用Java代码,与Java项目无缝集成。 4. **闭包**:Groovy的闭包(Closure)是其强大的功能之一,常用于函数式编程和事件处理。 综上所述,这场2015年BordeauxJUG的演讲很可能深入...
在 Android 应用程序中,我们常常会遇到各个组件(如 Activity、Fragment)之间需要相互传递消息的情况。传统的做法是通过接口回调或者静态方法来实现,但这样的方式会逐渐导致代码结构复杂,难以维护。EventBus ...