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

标签 java nashorn

我正在尝试使用我在 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/

相关文章:

java - 关于 javax 与 java 包的一些基本问题

nashorn - Karate 中具有 undefined variable 的三元条件逻辑

java - nashorn 引擎错误?

java - JSF 中 convertDateTime 的奇怪行为

java - 如何将类放入 Scala 中 JJS ScriptEngine 的范围中

security - 如何在 SecurityManager 下运行 Java 8 的 nashorn

javascript - Heroku 环境导致 Java/Nashorn/ReactJS 应用程序崩溃

java - spring mvc ajax数据用Jackson截断

java - 将 Android Room 数据库与 RXJava2 一起使用时找不到符号类 EmptyResultSetException

java - 对于删除任何索引处的节点,我无法理解最后一行代码 "temp.next = t;"