在nashorn脚本中对java对象设置“callable”

d8tt03nd  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(491)

我有一个类示例 Callable 在它上面。我把这个示例设置为 Bindings 对象。我需要设置 Callable nashorn中的字段,用java调用。如何在纳索恩脚本中设置此字段?
脚本的调用方式如下:

//in java
class Options {
    Callable<Boolean> handler;
}
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
Bindings bindings = engine.createBindings();
Options options = new Options();
bindings.put("options", options);
engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
engine.eval(script);
Invocable executor = (Invocable) engine;
executor.invokeFunction("init");

在剧本里,我需要设定 handler 在全球范围内 Options 对象:

//in nashorn
function init() {
    //How would I set a Callable on this field, from within nashorn?
    options.handler = ?
}

我已经看到了(建议重复)如何使用nashorn引擎来调用java对象的问题,但是这个问题是关于从nashorn脚本调用java方法的,而这个问题是关于在nashorn脚本中设置一个可调用的,然后可以从java调用它(基本上相反)。

bqujaahr

bqujaahr1#

基于本nashorn教程中的“扩展类”部分。测试,为我工作:

var Callable = Java.type('java.util.concurrent.Callable');
   var CallableImpl = Java.extend(Callable, {
     call: function() {
       print('test');
     }
   });

   options.handler = new CallableImpl();

相关问题