Java Nashorn - 如何在Java中定义一个接受匿名函数作为参数的JavaScript函数?

时间:2017-06-26 19:49:17

标签: javascript java java-8 anonymous-function nashorn

基本上我要做的是创建一个可以在JavaScript中使用的新函数,但它需要一个字符串和一个匿名函数作为参数传递。匿名函数也必须提供它自己的参数。

在我想要的JavaScript中:

addEventHandler( "eventName", function ( event ) {
    // do stuff
});

以及我希望Java解释的方式是这样的:

addEventHandler ( "eventName", event -> {
    // do stuff
});

这可能吗?什么?提前谢谢!

1 个答案:

答案 0 :(得分:2)

如果您的Java方法接受functional interface作为参数,则可以在javascript中传递匿名函数。

例如:

public static void main(String[] args) throws Throwable {
    ScriptEngine se = new ScriptEngineManager().getEngineByExtension("js");

    se.put("myObject", new MyClass());

    se.eval("myObject.someMethod('hello', function(e){ print(e); })");
}

public static class MyClass { // Class needs to be public
    public void someMethod(String s, Consumer<String> cons) {
        System.out.println(s);
        cons.accept("SomeString");
    }       
}

打印:

hello
SomeString