如何在 Nashorn 中调用带参数的匿名函数?

How can I call an anonymous function with arguments in Nashorn?

我正在尝试使用我在 Java.

中定义的 Nashorn 为 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 不接受任何参数 - 那么如何将参数传递给这个匿名函数?

Runnable.run 当然不接受任何参数。只需使用 Consumer<Object>:

public void each(Object[] arr, Consumer<Object> function) {
    for(Object o : arr) function.accept(o);
}

(或定义您自己的功能接口并使用它。)