У меня есть экземпляр класса, в котором есть поле Callable
. Я установил этот экземпляр на объект Bindings
. Мне нужно установить поле Callable
из Nashorn, чтобы оно вызывалось в Java. Как мне установить это поле из скрипта Nashorn?
Скрипт называется так:
//in java
class Options {
Callable<Boolean> handler;
}
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
Bindings bindings = engine.createBindings();
Options options = new Options();
bindings.put("options", options);
engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
engine.eval(script);
Invocable executor = (Invocable) engine;
executor.invokeFunction("init");
А в скрипте мне нужно установить поле handler
на глобальный объект Options
:
//in nashorn
function init() {
//How would I set a Callable on this field, from within nashorn?
options.handler = ?
}
Я видел (предлагаемый дубликат) вопрос Как использовать движок Nashorn для вызова объектов Java, но этот вопрос касается вызова метода Java из сценария Nashorn, тогда как этот вопрос касается установки вызываемого объекта внутри сценария Nashorn, который затем может быть вызван из Java (в основном наоборот).
handler
, что я думал будет так же просто, как установить лямбду, как в java, но это не сработало. На самом деле я не контролирую, как вызывается скрипт, и я мало знаю, что происходит в Java. Мне нужно написать сценарий nashorn, который просто устанавливает обработчики объектов в функцииinit
и вызывается в другом месте в java. Все, что мне было дано, это то, чтоOptions
будет установлено глобально, и для поляhandler
потребуется установить вызываемое. - person Werlious   schedule 16.12.2020Options.handler = Java.type('com.example.Handlers').SomeCallable
, но теперь мне нужно определить вызываемые объекты из nashorn. - person Werlious   schedule 16.12.2020