Javascript 如何从Java调用Nashorn`ScriptFunction`回调?
我在Java Nashorn中的对象上执行了一些javascript代码:Javascript 如何从Java调用Nashorn`ScriptFunction`回调?,javascript,java,java-8,nashorn,Javascript,Java,Java 8,Nashorn,我在Java Nashorn中的对象上执行了一些javascript代码: scriptEngine.eval("my.fn(function(a,b) {...}"); 我可以在类中创建方法fn,该方法接收ScriptFunction,但我不知道如何从Java传递参数和调用该函数 编辑 我可以将fn(Runnable)或fn(Callable)设置为fn(Runnable),但从我的fn的Java实现来看,我仍然不知道如何将参数传递给这两个变量中的任何一个。请避免在Java代码中使用任何na
scriptEngine.eval("my.fn(function(a,b) {...}");
我可以在类中创建方法fn
,该方法接收ScriptFunction
,但我不知道如何从Java传递参数和调用该函数
编辑
我可以将
fn(Runnable)
或fn(Callable)
设置为fn(Runnable)
,但从我的fn
的Java实现来看,我仍然不知道如何将参数传递给这两个变量中的任何一个。请避免在Java代码中使用任何nashorn内部类型,如jdk.nashorn.internal.runtime.ScriptFunction
。使用jdk9,jigsaw模块化访问检查阻止从用户代码访问此类类型
如果您确实希望将回调传递给在Nashorn脚本中实现的Java代码,有两种方法:
1) 接受任何@functional interface
输入代码(),如供应商
,消费者
,函数
等。当java代码中需要函数接口对象时,Nashorn允许将任何脚本函数作为参数传递。从脚本中,可以传递脚本函数。在java方面,您只需调用接口方法(如“get”、“accept”、“apply”等)。这些方法分别是供应商
、消费者
、函数
上的函数方法
2) 在Java代码中接受jdk.nashorn.api.scripting.JSObject()类型参数。当Java调用中需要JSObject时,可以通过脚本将脚本函数作为参数传递。从Java代码中,您可以调用JSObject[]上的“call”方法,以及当您的Java代码有一个重载时会发生什么,比如
公共承诺(Consumer oncompleted,Consumer onRejected)
和公共承诺(Function oncompleted,Function onRejected)
java.lang.NoSuchMethodException:无法在固定算术签名之间进行明确选择
为此添加了额外的重载(JSObject…相同的错误。无论如何,要保留重载并使nashorn默认为回退,使用ScriptFunction重载也无法解决此错误仅供参考