填充列表<可调用<String>>在 Groovy 中使用 Groovy 对象



在什么基于JVM的脚本语言中支持@WebService在运行时创建服务?有人建议我使用Groovy来提供在运行时读入的脚本中配置的web服务。

为了在我们现有的基础设施中实现这一点,我基本上需要能够向List<Callable<String>>添加新条目,然后我可以要求执行器对其调用Any。

基本结构如下:

  • Groovy是使用GroovyScriptEngine嵌入的
  • 在传入的Binding中,从Java传入的初始列表为"l">
  • Groovy脚本定义并实例化了N个对象,所有对象都实现了Callable<String>,并将它们添加到列表中
  • 回到Java中,列表会被进一步处理,然后传递给执行器

我最初的微弱步骤表明,我很可能需要使用def c = { ... } as Callable<String>,但随后我得到了ClassCastException。仔细阅读,我发现这似乎有点困难,而且涉及到闭包。

在实现Callable<String>的Groovy中定义和实例化对象的正确方法是什么?

在Groovy1.8及更高版本中,groovy.lang.Closure默认实现Callable,因此您不需要任何"as"魔术。,简单地说:

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

对于Groovy的早期版本(1.6和1.7当然不确定"古代"版本),您需要使用as:

import java.util.concurrent.Callable
l << ({ "hello" } as Callable)

最新更新