我正在尝试使用Nashorn为Javascript中的每个函数执行一个,我已经在Java中定义了它。
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
没有接受任何参数 - 那么如何将参数传递给这个匿名函数呢?
答案 0 :(得分:2)
Runnable.run
当然不接受任何论点。只需使用Consumer<Object>
:
public void each(Object[] arr, Consumer<Object> function) {
for(Object o : arr) function.accept(o);
}
(或者定义你自己的功能界面并使用它。)