我正在尝试使用我在 Java 中定义的 Nashorn 为 Javascript 中的每个函数执行一个函数。
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine eng = mgr.getEngineByExtension("js");
eng.put("script", new ScriptAPI());
try {
eng.eval("script.each([1,2,3], function(i){ print('i = ' + i); });");
} catch(ScriptException e)
{ e.printStackTrace(); }
如您所见,我的脚本正在调用 script.each
,其中 script
已被定义为 ScriptAPI
的实例,其中看起来如下:
public class ScriptAPI {
public void each(Object[] arr, Runnable function) {
for(Object o : arr) function.run();
}
}
但是,您可能已经注意到,我没有将 Object o
传递给函数;这是因为 function.run
不接受任何参数 - 那么我如何将参数传递给这个匿名函数?
最佳答案
Runnable.run
当然,不接受任何争论。只需使用 Consumer<Object>
:
public void each(Object[] arr, Consumer<Object> function) {
for(Object o : arr) function.accept(o);
}
(或者定义您自己的功能接口(interface)并使用它。)
关于java - 如何在 Nashorn 中调用带有参数的匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43047976/