Groovy动态解析
2017-05-03 10:30 猎手家园 阅读(4509) 评论(1) 编辑 收藏 举报A:前面需要说些什么吗?
B:不需要吗?
A:需要吗?
解析方式一:通过指定的paths来初始化GroovyScriptEngine
//通过指定的paths来初始化GroovyScriptEngine String[] paths = {"D:\\GroovyScript"}; GroovyScriptEngine gse = new GroovyScriptEngine(paths); Binding binding = new Binding(); binding.setVariable("input", "world"); gse.run("GroovyDemo.groovy", binding); System.out.println(binding.getVariable("output"));
GroovyDemo.groovy
output = "Hello ${input}!"
解析方式二:通过指定的roots来初始化GroovyScriptEngine
//通过指定的roots来初始化GroovyScriptEngine String[] roots = new String[]{"src/com/ccav/javarisk/"}; GroovyScriptEngine gsen = new GroovyScriptEngine(roots); GroovyObject groovyObject = (GroovyObject) gsen.loadScriptByName("HelloWorld.groovy").newInstance(); String result = (String) groovyObject.invokeMethod("output", "world"); System.out.println(result);
HelloWord.groovy
class TestScript { static String output(def str) { return "Hello " + str + ", I'm first!"; } }
解析方式三:创建engine实例直接解析文本内容
//创建engine实例直接解析文本内容 ScriptEngineManager factory = new ScriptEngineManager(); //每次生成一个engine实例 ScriptEngine engine = factory.getEngineByName("groovy"); System.out.println(engine.toString()); assert engine != null; Bindings binding = engine.createBindings(); binding.put("date", new Date()); //如果script文本来自文件,请首先获取文件内容 engine.eval("def getTime(){return date.getTime();}", binding); engine.eval("def sayHello(name,age){return 'Hello,I am ' + name + ',age' + age;}"); Long time = (Long) ((Invocable) engine).invokeFunction("getTime", null); System.out.println(time); String message = (String) ((Invocable) engine).invokeFunction("sayHello", "zhangsan", new Integer(12)); System.out.println(message);
欢迎关注我的公众号:云栖语,不一样的研发视界。

云栖语微信公众号:change-1978
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术