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
基本上我想做的是创建一个新函数,它可以在 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