在Java中,我定义了一个功能接口,该功能接口可以将另一个功能接口作为参数。
public static TriConsumer<SomeObject, Number, Consumer<SomeObject>> test = ....
我在启用乐观类型的情况下初始化了nashorn引擎,并通过绑定将“ test”参数传递给了nashorn。
Bindings bindings = new SimpleBindings();
bindings.put("test", test);
scriptEngine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
现在,我可以将此方法作为javascript中的函数来调用。
test(...params...);
但是,我无法弄清楚该方法的正确方法是什么,主要是我对thid参数-Consumer对象有麻烦。
如果我尝试按以下方式调用函数:
test(anObject, aNumber, function(anAnotherObject) {
anAnotherObject.callSomeFunction(...)
});
我得到一个错误:
ClassCastException: jdk.nashorn.api.scripting.ScriptObjectMirror cannot be cast to java.util.function.Consumer
最终,我能够使用以下语法调用该方法:
var Consumer = Java.type(consumer.package.Consumer)
test(anObject, aNumber, new (Java.extend(Consumer, {
accept: function(anObject) {
}
})));
我想避免这种方法。我正在尝试构建该项目,因此它将对不了解Java内部知识的人很有用。这样的事情只会让我所有的用户感到困惑。
是否可以通过任何方式简化语法?
(我被困在Java 8上,我无法更新项目以使用Java 9或10)