如果我使用GroovyShell,它就像这样:
CompilerConfiguration cfg = new CompilerConfiguration()
cfg.setScriptBaseClass(CustomScript.class.getName())
GroovyShell shell = new GroovyShell(cfg)
其中“CustomScript”是包含自定义函数的自定义类。
当我使用JSR-223 API来集成Groovy和Java时,我该如何做到这一点?
我没有在JSR-223 API或GroovyScriptEngineImpl中找到任何接口。
1条答案
按热度按时间sh7euo9m1#
在GroovyScriptEngine上,您只需执行以下操作:
JSR-223实际上并没有与之等效的功能。您可以将Java对象示例绑定到一个全局变量中,以便将这些API公开给您想要的任何脚本语言。
脚本引擎引擎=...引擎.put(“系统”,新系统支持())
但在你的剧本里会是这样的:
但是你不能透明地子类化CustomScript来“全局地”公开方法。不是所有的脚本语言都像Java那样只从对象的Angular 工作。以Javascript为例。在不支持典型OO的JS中子类化Java对象将如何工作呢?JSR-223在很大程度上是从Javascript的Angular 考虑的。
出于实用目的,您可能希望评估JSR-233 API兼容性是否是必须的,并适应它,或者干脆放弃诱饵,使用特定的脚本引擎(如Groovy)。但我可能会选择DSL路线,而不是将对象子类化,因为我认为它更灵活,表达能力更强。