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

Java Nashorn - How to define a JavaScript function in Java which accepts an anonymous function as an argument?

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

在Java脚本中我想要:

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

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

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

这可能吗?完全没有?提前致谢!

如果您有一个接受 functional interface 作为参数的 Java 方法,您可以在 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