【问题标题】:Java Nashorn - How to define a JavaScript function in Java which accepts an anonymous function as an argument?Java Nashorn - 如何在 Java 中定义一个接受匿名函数作为参数的 JavaScript 函数?
【发布时间】:2017-06-26 19:49:16
【问题描述】:

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

在我想要的 JavaScript 中:

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

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

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

这可能吗?有吗?提前谢谢!

【问题讨论】:

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


    【解决方案1】:

    如果您有一个接受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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-16
      • 1970-01-01
      • 2011-03-02
      相关资源
      最近更新 更多