填充列表<;可调用<;字符串>&燃气轮机;在Groovy中使用Groovy对象

填充列表<;可调用<;字符串>&燃气轮机;在Groovy中使用Groovy对象,groovy,embed,Groovy,Embed,在年,有人建议我使用Groovy提供在运行时读入的脚本中配置的web服务 为了在现有的基础设施中实现这一点,我需要能够将新条目添加到列表中,然后我可以请求执行者调用该列表 基本结构如下所示: Groovy是使用GroovyScriptEngine 从Java传入的初始列表在传入的绑定中作为“l”传入 Groovy脚本定义并实例化N个对象,所有对象都实现了Callable,并将它们添加到列表中 在Java中,列表将被进一步处理,然后传递给执行器 我最初的薄弱步骤表明,我很可能需要使用defc=

在年,有人建议我使用Groovy提供在运行时读入的脚本中配置的web服务

为了在现有的基础设施中实现这一点,我需要能够将新条目添加到
列表中,然后我可以请求执行者调用该列表

基本结构如下所示:

  • Groovy是使用
    GroovyScriptEngine
  • 从Java传入的初始列表在传入的绑定中作为“l”传入
  • Groovy脚本定义并实例化N个对象,所有对象都实现了
    Callable
    ,并将它们添加到列表中
  • 在Java中,列表将被进一步处理,然后传递给执行器
我最初的薄弱步骤表明,我很可能需要使用
defc={…}作为可调用的
,但随后我得到了一个ClassCastException。通过阅读,我发现这似乎有点困难,并且涉及到闭包


在Groovy中定义和实例化一个对象的正确方法是什么,它实现了
Callable

在Groovy 1.8及更高版本中,
Groovy.lang.Closure
默认实现了
Callable
,因此您不需要任何“as”魔法,简单地说:

l << { "hello" }
l << { "world" }

您使用的是什么版本的Groovy?闭包已经在Groovy 1.8及更高版本中实现了可调用。@IanRoberts我从Maven中引入了Groovy-all-1.0-jsr-05,它似乎是最新的
org.codehaus.groovy.runtime.InvokerHelper.getVersion()
报告“1.0-jsr-05”。我应该用别的东西吗?那是很古老的TBH。是最新的。我更新了,现在脚本工作了。你能给我一个我能接受的答案吗?
import java.util.concurrent.Callable

l << ({ "hello" } as Callable)