gpt4 book ai didi

groovy - 我可以从 Java 向 Groovy 基本脚本动态添加方法吗?

转载 作者:行者123 更新时间:2023-12-02 08:14:24 27 4
gpt4 key购买 nike

虽然这不是标准做法,但我很好奇是否可以将方法注入(inject)到 GroovyShell 编译上下文中。

这个想法是有类似的东西(在Java中):

GroovyShell shell = new GroovyShell();
Script script = shell.parse("test()");
script.run();

我想动态添加可调用的方法,其中 test() 已列出。

我尝试了一些弄乱 Script metaClass 的方法,但我没有找到实际操作 metaClass 的方法来自 java 。特别是,调用 script.getMetaClass().getMethods().add(...) 会引发 UnsupportedOperationException。

本质上,我想定义调用 Java 方法而不是基于 Groovy 的方法的 DSL 调用点。我愿意用 Groovy 编写这一部分(并且知道如何做到这一点),但我真的很好奇这是否是一种可行的替代方法,或者如果不是,那么有什么陷阱。

简而言之:如何动态定义 GroovyShell 知道的方法?

最佳答案

对此有两个非常简单的解决方案:a) 典型的“脚本”方法b) 更绝妙的方法

a) 只是在脚本字符串前面加上定义方法的字符串。b) 将引用放入绑定(bind)中,例如以“测试”为名。该引用的值是 Closure 对象或具有“call(args)”方法的任何其他对象。当执行脚本时,Groovy 看到“test()”,它会首先尝试查找这样的方法,如果不存在这样的方法,它会尝试将“test”解析为属性,并在绑定(bind)中找到它。然后它将使用提供的参数(如果有)调用如此解析的引用(闭包)。

还有更高级的选项,例如提供 CompilerConfiguration,这些都列在“Groovy in Action,第二版”(无耻插件)的 DSL 章节中。

关于groovy - 我可以从 Java 向 Groovy 基本脚本动态添加方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18884994/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com